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是不成熟的)。