express cookie 返回未定义
Posted
技术标签:
【中文标题】express cookie 返回未定义【英文标题】:express cookie return undefined 【发布时间】:2012-08-25 04:36:18 【问题描述】:我正在尝试在 express.js 上设置 cookie,但它返回未定义。
我搜索了很多网页并将express.cookieParser()
放在app.use(app.router)
上方
但它仍然无法返回正确的值。
app.js
app.configure(function()
var RedisStore = require('connect-redis')(express);
app.use(express.logger());
app.set('view options', layout: false );
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser(uploadDir: './uploads/tmp'));
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session( secret: "william", store: new RedisStore ));
//Initialize Passport! Also use passport.session() middleware, to support
//persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());
//app.router should be after passportjs
app.use(app.router);
app.use(express.compiler( src: __dirname + '/public', enable: ['less']));
app.use(express.static(path.join(__dirname, 'public')));
);
app.get('/', function(req, res)
res.cookie('cart', 'test', maxAge: 900000, httpOnly: true)
);
app.get('/test', function(req, res)
res.send('testcookie: ' + req.cookies.cart);
);
结果:
testcookie: undefined
【问题讨论】:
【参考方案1】:Cookie 在 HTTP 标头中设置。 res.cookie()
只是为您的 HTTP 结果设置标头,但实际上并不发送任何 HTTP。如果您的代码在语法上是正确的并且它运行了,那么它实际上只是坐着而不返回任何东西。我还在app.get()
中修复了您代码中的一些语法错误:
app.get('/', function(req, res)
res.cookie('cart', 'test', maxAge: 900000, httpOnly: true);
res.send('Check your cookies. One should be in there now');
);
【讨论】:
【参考方案2】:您需要在设置 cookie 后发送一些内容,或者至少致电res.end()
。否则,res.cookie()
所做的只是将一些标头添加到稍后将发送出去的标头列表中。
【讨论】:
【参考方案3】:将 cookie 名称设置为 value,其中可能是转换为 JSON 的字符串或对象。路径选项默认为“/”。
res.cookie('name', 'tobi', domain: '.example.com', path: '/admin', secure: true );
这里是更多详细信息的链接
http://expressjs.com/api.html#res.cookie
【讨论】:
以上是关于express cookie 返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vue 3 的 Vue Router 中获取 cookie?这个在 router/index.js 中未定义
Node.js + Express POST 请求返回未定义
res.session 未定义 graphql apollo-server-express