cookie-parser:空cookie对象

时间:2018-04-23 10:35:11

标签: javascript node.js express cookies npm

我正在尝试在表单提交上阅读浏览器cookie。 cookie-parser返回一个空的cookie对象,但是在我的浏览器中我可以看到有很多cookie设置。这是我的代码:

const express = require("express");
const path = require("path");
const bodyParser = require("body-parser");
const testform = require("./nodejs/testform.js");

const app = express();
const cookies = require("cookie-parser");

const fromFolder = path.join(__dirname, process.env.FOLDER);
const toFolder = path.join(__dirname, "/");
console.log("from: ", fromFolder);
console.log("to: ", toFolder);

app.set("port", process.env.PORT || 5000);

app.use(express.static(fromFolder));
app.use(cookies());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/', function(req, res) {
  console.log(req.cookies);  // outputs "{}" <----
  testform.doSomething(req, res);
});

app.listen(app.get("port"), function() {
  console.log("Node app is running on port", app.get("port"));
});

2 个答案:

答案 0 :(得分:1)

看来你正在做的一切正确。但是,请务必了解您的浏览器不会在每次请求时发送所有 Cookie。例如,它将发送以下Cookie:

  1. 具有不匹配的范围(EG与当前页面不同的域/路径)
  2. 已过期
  3. 我建议在控制台中设置一个与当前域匹配的cookie。 EG导航到localhost:3000或您可以访问Express服务器的任何位置。然后你可以在控制台中使用这样的函数来设置cookie(感谢https://stackoverflow.com/a/24103596/3084820):

    function setCookie(name,value,days) {
        var expires = "";
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days*24*60*60*1000));
            expires = "; expires=" + date.toUTCString();
        }
        document.cookie = name + "=" + (value || "")  + expires + "; path=/";
    }
    
    setCookie('hello', 'world', 10);
    

    刷新页面,或导航到localhost:3000上的其他链接(或找到您的服务器的任何位置。)

    您应该看到您的cookie已收到服务器端。

    MDN在cookies的范围等方面有一些很好的文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

答案 1 :(得分:0)

您确定要设置Cookie吗?

  

要存储状态,源服务器包含一个Set-Cookie标头      HTTP响应。在后续请求中,用户代理返回a      Cookie请求标头到源服务器。