节点js / express上未定义Cookie(localhost)

时间:2016-09-21 11:35:16

标签: javascript node.js express cookies

我想是一个新手问题。我想在我的快递网站上设置并获取cookie。

cookieParser已设置好像正在运行。但我的饼干总是未定义的。那有什么不对? Cookie不适用于localhost吗? 我可以在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();

});

任何线索?

1 个答案:

答案 0 :(得分:3)

也许你应该改变:

console.log(res.cookie.cart);

为:

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。我甚至包含了reqCookie,它没有存储在变量中,而是在req.cookies调用期间直接从res.end()访问,以证明它没有被更改。