Express.js:Cookie被保存得很晚

时间:2014-01-25 18:46:23

标签: node.js cookies express

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

我正在更改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。如果我通过用id3替换id2重复该过程,page1的内容将显示id2,依此类推。

我尝试在res.cookie(...)函数上进行回调,但在其中没有调用任何内容。看起来像是:

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

1 个答案:

答案 0 :(得分:2)

当您的模板(或任何其他相关代码)访问req.cookies时,它将访问客户端发送的cookie(因此使用{{访问先前在不同请求中设置的值) 1}})。

这些Cookie独立于您使用res.cookie()设置的Cookie,因此使用该Cookie不会更新同一请求中res.cookie()中的任何值(您只是告诉Express,完成此请求后,请在响应中添加req.cookies标头

由于您将Set-Cookie存储为Cookie值,因此您可以在渲染模板时使用它:

req.body.name

在你的模板中:

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

(但是,您无法确定在呈现时您发回的cookie实际上是否会被客户端接受,因此技术上说 cookie记住是不成熟的。)