我认为这是因为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');});
答案 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记住是不成熟的。)