2014-01-25 65 views
1

我認爲這是因爲Node.js的異步特性。Express.js:Cookie被保存得太晚

我正在更改cookie的值,然後呈現新頁面。然而,在呈現新頁面時,該頁面顯示剛剛被覆蓋的cookie的內容。就好像cookie被保存了一小步。

res.cookie('loginid',req.body.name,{maxAge:60000}); 
res.render('page1'); 

在第1頁,我有:

<% if(req.cookies.loginid){ %> 
cookie remembered. Hi, <%= req.cookies.loginid %>! <% } %> 

實施例:餅乾目前已登錄ID = 「ID1」。我將它設置爲id2,然後渲染page1。然後我被髮送到page1,當然,它顯示id1。如果我通過將id2替換爲id3來重複該過程,則page1的內容將顯示id2,依此類推。

我試着在res.cookie(...)函數上做一個回調,但是裏面沒有任何東西被調用。它看起來像:

res.cookie('loginid',req.body.name,{maxAge:60000}, function(req,res){console.log('test');}); 

回答

2

當你的模板(或與此有關的任何其他代碼)訪問req.cookies,它將訪問是由客戶端(使先前設置的值發送的cookie,在不同的請求,使用res.cookie())。

這些餅乾都是獨立的,你正在使用res.cookie()設置cookie的,所以使用不會更新同一請求中的任何req.cookies值(你只是告訴快遞,當申請完成後,請包括Set-Cookie響應中的頭部,此值爲)。

既然你存儲req.body.name作爲cookie值,你可以只使用在執行你的模板:

res.render('page1', { loginid : req.body.name }); 

而且在你的模板:

<% if (loginid) { %> 
cookie remembered. Hi, <%= loginid %>! <% } %> 

(但是,你不能確定在呈現時,您發回的cookie實際上會被客戶端接受,因此技術上說cookie記住是不成熟的)。

+0

非常詳細的回覆。謝謝! – rch