javascript – 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:

《javascript – Req.headers.cookie是空的,即使在请求标头中有cookie也是如此》

响应标头中包含cookie:

《javascript – Req.headers.cookie是空的,即使在请求标头中有cookie也是如此》

我在这里做错了吗?我无法弄清楚出了什么问题……是不是cookie解析器意味着使用来自req.headers.cookie属性的cookie来填充req.cookies?为什么req.headers.cookie返回空. req.headers.cookiealso如果我注释掉任何与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设置.

点赞