繁体   English   中英

为什么我不能用Node.js express设置cookies?

[英]Why I couldn't set cookies with Node.js express?

这是我的代码:

 const app = express(); const cookieParser = require('cookie-parser'); app.use(cookieParser()); app.post("/pinfo", (req, res) => { var form = new formidable.IncomingForm(); form.parse(req, async function (err, fields) { var nhs_num = 1000000; // it should be a return value from another function using fields values as parameters res.cookie("nhsnum", nhs_num, { expires: new Date(Date.now() + 1000 * 60 * 5), httpOnly: true }); // set a cookie expired in 5 minutes console.log(req.cookies.nhsnum); }) });

代码在一个Node.js的服务器上,从HTML的客户端获取表单提交,然后使用表单详情获取结果,最后保存到cookie中。

当我尝试记录 cookie 时,控制台中有一个 undefined。 我不明白为什么。 有没有我做错的过程? 如果有人可以帮我解决这个问题,我真的很感激。

req.cookies包含随传入请求一起到达的 cookies。 它不包含将在响应中设置并发送回客户端的 cookies。

因此,当您执行res.cookie(...)时,它会向响应 object 添加一个 cookie(从技术上讲,向响应添加一个set-cookie header ),以便客户端在收到响应时选择该 cookie。

如果您想在req.cookies中查看 cookie,请在该客户端的下一个请求中查看req.cookies (在 cookie 过期之前)。 您新创建的 cookie 应该会显示在下一个请求中。

在此请求中,您可以通过执行以下操作查看传出的 cookies:

console.log(res.getHeaders());

而且,您会看到这样的nhsnum cookie:

[Object: null prototype] {
  'x-powered-by': 'Express',
  'set-cookie': 'nhsnum=1; Path=/; Expires=Mon, 03 Oct 2022 00:08:01 GMT; HttpOnly'
}

你的客户端和服务端是同源吗?如果不是,你应该在客户端页面设置请求模式, credentials: "include",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM