Req.headers.cookie是空的,即使在请求头中有Cookie

有了Express,我有以下设置:

const express = requires("express"); const path = requires("path"); const bodyParser = requires("body-parser"); const cookieParser = requires("cookie-parser"); let server = express(); server.set("port", (process.env.PORT || 5000)); server.set("views", path.join(__dirname, "/views")); server.set("view engine", "ejs"); server.use(cookieParser()); server.use(express.static(self.workingDirectory + "/public")); server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ extended: true })); server.use((req, res, next) => { // if req.cookies exists and testcookie is undefined within req.cookies if ( req.cookies && typeof req.cookies["testcookie"] === "undefined" ) { console.log("Setting cookie! Testcookie was not found"); res.cookie("testcookie", "test", { maxAge : ((((1000*60)*60)*24)*7), /* expire a week from today */ httpOnly: true /* document.cookie doesn't return this cookie */ }); } next(); }); server.get("/", (req, res) => { res.render("pages/index"); }); server.listen(server.get("port"), () => { console.log("Server started!"); }); 

所以当我访问/ cookie被设置为适当的,但在每次访问后,它一直在设置。 后来,当我通过一个新的中间件来运行console.log(req.headers) ,它在每次访问/时显示以下内容,即使cookie已经被设置:

响应头文件中有cookie:

我在这里做错了什么? 我无法弄清楚什么是错误的…不是cookie-parser意味着从req.headers.cookie属性中填充req.cookies cookie吗? 为什么req.headers.cookie返回空。 req.headers.cookie也返回空,如果我注释掉任何与cookie-parser

似乎没有任何错误的代码。 下面的代码(编辑删除查看引擎的详细信息)的作品。 参考其使用以下npm软件包版本:

 "dependencies": { "body-parser": "^1.17.2", "cookie-parser": "^1.4.3", "express": "^4.15.3" } 

添加了一个额外的中间件( exampleMiddleWare )来突出显示路由上的cookie检查。

 const express = require("express"); const path = require("path"); const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); let server = express(); server.set("port", (process.env.PORT || 5000)); server.use(cookieParser()); server.use(bodyParser.json()); server.use(bodyParser.urlencoded({extended: true})); server.use((req, res, next) => { // if req.cookies exists and testcookie is undefined within req.cookies if (req.cookies && typeof req.cookies["testcookie"] === "undefined") { console.log("Setting cookie! Testcookie was not found"); res.cookie("testcookie", "test", { maxAge: ((((1000 * 60) * 60) * 24) * 7), /* expire a week from today */ httpOnly: true /* document.cookie doesn't return this cookie */ }); } next(); }); const exampleMiddleWare = (req, res, next) => { res.hasTestCookie = !!req.cookies.testcookie next(); }; server.get("/", exampleMiddleWare, (req, res) => { res.send(`<h1>Cookie Test</h1><h2>Cookie Found: ${res.hasTestCookie}</h2>`); }); server.listen(server.get("port"), () => { console.log("Server started!"); }); 

如果你无法得到上述的工作,那么可能在不同的浏览器进行健全性检查,因为你的cookie设置可以被覆盖或改变浏览器选项和插件。

我试过上面的代码片段,req.headers.cookie不是空的。 我收到了来自req.header的cookie值。

  const express = require("express"); const path = require("path"); const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); let server = express(); // server.set("port", (process.env.PORT || 5000)); // server.set("views", path.join(__dirname, "/views")); // server.set("view engine", "ejs"); server.use(cookieParser()); // server.use(express.static(self.workingDirectory + "/public")); server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ extended: true })); server.use((req, res, next) => { // if req.cookies exists and testcookie is undefined within req.cookies if ( req.cookies && typeof req.cookies["testcookie" ] === "undefined" ) { console.log("Setting cookie! Testcookie was not found"); res.cookie("testcookie", "test", { maxAge : ((((1000*60)*60)*24)*7), /* expire a week from today */ httpOnly: true /* document.cookie doesn't return this cookie */ }); } next(); }); server.get("/", (req, res) => { console.log(req.headers); res.send(`<h1> hello world </h1>`); }); server.listen(5000, () => { console.log("Server started!"); });