Cookies在node js/express(本地主机)上未定义

4

这算是一个新手问题。我想在我的express网站上设置和获取cookie。

cookieParser已经设置并运行。但我的cookie始终是未定义的。那么问题出在哪里呢?cookie在本地主机上无法工作吗?我可以在chrome控制台中访问所有cookie。

我尝试过httpOnly: false/true。

以下是我的代码:

var express = require('express'),
    exphbs = require('express-handlebars'),
    bodyParser = require('body-parser'),
    cookieParser = require('cookie-parser'),
    request = require('request'),
    livereload = require('express-livereload'),
    port = Number(process.env.PORT || 3000);

var log = require('./lib/log.js'));

var app = express();

livereload(app, config = {watchDir: process.cwd()});

app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

app.use(express.static('public'));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true}));

app.get('/', function(req, res) {

    res
        .cookie('cart', 'test', {maxAge: 900000, httpOnly: false})
        .render('index');

    console.log(res.cookie.cart);

});


app.listen(port, function() {

    log.clear();
    log.out('Express on http://localhost:' + port);
    log.hr();

});

有线索吗?


你能发布你的app.js文件代码吗? - abdulbarik
当然可以!我刚刚更新了帖子。 - arpo
1个回答

5
也许您应该更改:
console.log(res.cookie.cart);

to:

console.log(req.cookies.cart);

我刚刚写了一个简单的例子来演示正在发生的事情:
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/', function(req, res) {
  var oldCookie = req.cookies.test;
  var newCookie = (oldCookie|0) + 1;
  res.cookie('test', newCookie, {maxAge: 900000});
  res.status(200).json({
    newCookie: newCookie,
    oldCookie: oldCookie,
    reqCookie: req.cookies.test,
  });
});
app.listen(3000, function () {
  console.log('Listening on http://localhost:3000/');
});

当您运行它并在浏览器中输入http://localhost:3000/,您将看到以下内容:
{"newCookie":1}

当您重新加载页面时,您将看到:
{"newCookie":2,"oldCookie":"1","reqCookie":"1"}

以下是正在发生的事情:在第一个请求中,即使您在打印之前在处理程序中设置了cookie,它实际上还没有被设置-它只是排队等待通过带有类似于此的HTTP标头的响应传递给客户端:

Set-Cookie: test=1; Max-Age=900; Path=/; Expires=Wed, 21 Sep 2016 13:03:06 GMT

在第二个请求中,您会看到reqCookie中的旧值和newCookie中的新值 - 这些值是不同的。设置cookie并不会更改您在请求中获取的cookie。我甚至包括了req.cookies中直接访问而不是存储在变量中的reqCookie,以证明它没有被更改。

是的!就是这样。谢谢。 - arpo
1
@arpo 很高兴听到这个消息。我在答案中添加了一个示例,以展示正在发生的事情。 - rsp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接