【发布时间】:2020-04-18 10:49:33
【问题描述】:
我是 Express 的新手,发送 cookie 时遇到问题。 我制作了一个简单的快速应用程序,需要为浏览器设置一个 cookie。这是服务器:
const express = require('express');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const app = express();
//app.use(cors());
app.use((req, res, next) => {
res.append('Access-Control-Allow-Origin', ['http://127.0.0.1:5500']);
res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.append('Access-Control-Allow-Headers', 'Content-Type');
res.append('Access-Control-Allow-Credentials', 'true');
next();
});
app.use(cookieParser());
app.use(express.json());
const PORT = 9000;
app.get('/', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.cookie('testCookie', 'random value', {httpOnly: false, secure: false});
res.send({user: "test", password: "test123"});
})
app.listen(PORT, console.log(`Server started on port ${PORT}`));
所以它成功地通过 fetch 向浏览器发送了 testCookie:
let response = await fetch('http://localhost:9000/', {
method: 'GET',
mode: 'cors',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
}
}).then(response => response.json());
console.log(response);
请求成功后,cookie 发送成功,因为它位于 Chrome cookie 选项卡中,但 document.cookie 返回一个空字符串。而且当我向页面发出请求时,请求不包含 Cookie 标头。
如何使 cookie 对 document.cookie 和浏览器可见以发送他的 Cookie 标头?
【问题讨论】:
-
这会记录什么 console.log(req.cookies)?
-
在服务器端,console.log(req.cookies) 成功返回 cookie,但如果我向另一个页面发出请求,cookie 将不会与 HTTP 请求中的 Cookie 标头一起发送
-
你试过在HTTP请求的头部手动设置cookie吗?
-
我无法手动设置它,因为我无法在浏览器中获取它 - document.cookie 返回一个空字符串,我需要的目的是将身份验证 JWT 从服务器发送到浏览器
-
你是如何发出 HTTP 请求的,我的意思是在节点 js 中你正在这样做?请发布您的 HTTP 请求的代码。
标签: javascript node.js express cookies cross-domain