Express.js:Cookie被保存得太晚

我认为这是因为Node.js的asynchronous性质。

我正在更改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 %>! <% } %> 

例如:Cookie目前有loginid =“id1”。 我把它设置为id2,然后渲染page1。 然后我被发送到page1,当然,它显示id1。 如果我用id3replaceid2来重复这个过程,page1的内容会显示id2,依此类推。

我试着对res.cookie(…)函数做一个callback,但是里面没有任何东西被调用。 它看起来像:

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

当你的模板(或任何其他代码)访问req.cookies ,它将访问客户端发送的cookie(所以在不同的请求中使用res.cookie() )来设置这些值。

这些cookie独立于您使用res.cookie()设置的cookie,因此使用它不会在同一个请求中更新req.cookies中的任何值(您只是告诉Express, 当请求完成时,请包括具有此值的响应中的Set-Cookie标头 )。

由于您将req.body.name存储为cookie值,因此您可以在渲染模板时使用它:

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

并在您的模板中:

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

(然而,在渲染的时候,你不能确定你发回的cookie实际上会被客户接受,所以在技术上说, 记住cookie是不成熟的)。