我想是一个新手问题。我想在我的快递网站上设置并获取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();
});
任何线索?
答案 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()
访问,以证明它没有被更改。