繁体   English   中英

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

[英]Cookies undefined on node js/express (localhost)

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

cookieParser已设置并且似乎正在运行。 但是我的cookie始终是不确定的。 那么有什么问题呢? Cookies在本地主机上不起作用吗? 我可以在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();

});

有什么线索吗?

也许您应该更改:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM