2014-10-02 44 views
3

我對於會話做什麼只有最匆忙的概念,並且the official documentation does not help much,因爲它假定我知道會話是什麼,因此也知道爲什麼用戶需要序列化和反序列化。在使用護照和快遞的會話中,序列化和非分散化到底是做什麼的?

下面是我認爲我知道的一個問題:會話就像服務器冰箱上粘貼的便箋,上面寫着「用戶bob很酷,讓他進來」。每當一個新的請求來自bob時,服務器都會檢查這個post-it節點,然後說:「是的,Bob仍然很酷。」

因此,序列化正在寫後便條,而反序列化正在取消它。這裏是我不明白的地方:這段代碼是如何編寫一個post-it節點的,完成了什麼?

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

下面的代碼如何丟棄便條? findByID訪問我存儲用戶的數組。爲什麼如果「便籤」剛剛被扔掉就需要訪問?

passport.deserializeUser(function(id, done) { 
    findById(id, function (err, user) { 
    done(err, user); 
    }); 
}); 

究竟是什麼流程呢?

這些示例代碼的其餘部分是here

回答

4

你已經完成一半了你的冰箱的比喻。會議確實就像一張便利貼,但是你可以寫出你想要的內容。序列化是寫作部分,反序列化是閱讀部分。

因此,您的用戶登錄。您不希望在會話中保留所有信息,因爲它已經存在於數據庫中。但在隨後的請求中,你想記住他是誰。所以,你必須在你的帖子上寫下它是他的ID,比如說1234.通過調用完成,你通知護照,這是你想要在會議中存貨。

在隨後的通話中,護照檢索你的貼子並說「好吧,我知道這個人,他的ID是1234」。 findById是您調用的方法來檢索他的所有信息,如他的名字。通過在這裏打電話完成,你說「好的,這裏是關於該用戶的信息,他的名字是鮑勃。」

如果您想知道爲什麼要調用done而不是簡單地返回值,那是因爲序列化和反序列化都可能是異步的。如果您想了解更多有關異步代碼的信息,我強烈建議您閱讀Node the right way,因爲它是Node.js的核心概念。

希望這會有所幫助。

相關問題