请求标头在使用Express 4.x的res.cookie时无法获取cookie

时间:2017-08-29 07:49:34

标签: node.js express cookies

我只想尝试基本方法来设置cookie并在请求头中显示。

前端只是一个基本的html表单,用户名和密码文本输入,使用POST方法传输数据。

下面是基于express的代码。

服务器只接收req.body,然后将其设置为域名为cookie:localhost:1338 / base

cookieRouter.js:

if (commit.getAuthorIdent().getWhen().equals(aAuthor == BadAuthor))
    // This was missing ------------------------------------------^
    git.rm().call()

app.js

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var router = express.Router();
router.use(bodyParser.urlencoded({ extended: false }));
router.use(cookieParser());

router.get('/', function (req, res) {
    res.send('this is a router base page!');
});

router.get('/index1.html', function (req, res) {
    res.sendFile(__dirname + '/index1.html');
});

router.post('/index1.html', function (req, res) {
    res.cookie('name', req.body, { domain: 'localhost:1338', path: '/base' });
    res.send(req.body);
});

module.exports = router;

运行app.js后,请求标头显然有set-cookie值。但是无法将其置于请求标头中,并且req.cookies是空对象{},即使在刷新网络之后也是如此。

enter image description here

但如果我只使用最简单的演示,它可以工作,例如:

var express = require('express');
var app = express();
var cookieRouter = require('./cookieRouter.js');
app.get('/', function (req, res) {
    res.send('this is home page!');
});
app.use('/base', cookieRouter);
app.listen(1338);

还有一件事,我觉得快递的问题是只有一个router.get('/', function (req, res) { res.cookie('name', 'test'); }); res.send() ...可以发送,因为默认会自动添加头部,否则会产生错误:发送后无法设置标头。 有人说添加res.redirect()可以解决这个问题,但我失败了,所以想知道如何添加,有人可以提供完整的演示吗?

1 个答案:

答案 0 :(得分:2)

Cookie丢失,因为domain属性不正确 - 'localhost:1338'需要更改为'localhost'。端口信息不应包含在domain

是的,根据浏览器开发工具的网络面板,有一个Set-Cookie响应标头(如屏幕截图所示)。但是,如果您检查Chrome中的Application - Cookies面板(或其他浏览器中的相应面板),您会发现:Set-Cookie标头指定的Cookie不存在。浏览器不会存储它,也不会在以下HTTP请求中发送它。

另请注意,由于Cookie的路径为/base,因此只有网址以/base开头的HTTP请求才能发送Cookie。