我正在尝试在表单提交上阅读浏览器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"));
});
答案 0 :(得分:1)
看来你正在做的一切正确。但是,请务必了解您的浏览器不会在每次请求时发送所有 Cookie。例如,它将不发送以下Cookie:
我建议在控制台中设置一个与当前域匹配的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请求标头到源服务器。