Nodejs expressjs 不能从request对象中获取Cookie?
Nodejs expressjs 不能从request对象中获取Cookie?
各位大牛,请教个问题: 我expressjs开发web应用,在routes中获取不到cookie,代码如下
exports.savePage = function (req,res){
var uid;
var token;
if(req.cookies){//这个永远为空,在这里断点,浏览器调试发现请求中没有cookie
uid = req.cookies.uid;
}
.....
res.render(.....)//在完成render后,再查看浏览器调试请求中又出现了cookie
}
通过chrome调试模式下的调试发现,当连接服务端时一开始是没有,当完成服务端render操作后,浏览器调试又可以看到cookie已经上传,我一时弄不明白了,找了半天也没找到资料,请各位大牛给把把脉,谢谢了先 :)
Node.js ExpressJS 无法从 request
对象中获取 Cookie?
各位大牛,请教一个问题:
我在使用 ExpressJS 开发 Web 应用时,遇到一个奇怪的问题:在路由处理函数中无法从 req.cookies
中获取到 Cookie。以下是相关代码:
exports.savePage = function (req, res) {
var uid;
var token;
// 这里检查 req.cookies 是否为空
if (req.cookies) { // 这个永远为空,在这里断点,浏览器调试发现请求中没有 cookie
uid = req.cookies.uid;
}
// 其他逻辑...
res.render('someTemplate', { /* ... */ });
// 在完成 render 后,再查看浏览器调试请求中又出现了 cookie
}
通过 Chrome 调试模式发现,当客户端连接服务端时,一开始是没有 Cookie 的,但当完成服务端的 res.render
操作后,浏览器调试又可以看到 Cookie 已经上传。我一时弄不明白原因,找了半天也没找到相关的资料,请各位大牛帮忙看看,谢谢了!
解释
这个问题通常是因为 Express 默认情况下不会解析 Cookie。为了从 request
对象中获取 Cookie,你需要使用中间件来解析 Cookie。
你可以使用 cookie-parser
中间件来解决这个问题。以下是如何设置并使用 cookie-parser
的步骤:
-
安装
cookie-parser
:npm install cookie-parser
-
在你的应用中引入并使用
cookie-parser
:const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); // 使用 cookie-parser 中间件 app.use(cookieParser()); // 你的路由定义 app.get('/savePage', function (req, res) { var uid; var token; // 现在可以正确地从 req.cookies 中获取 cookie if (req.cookies && req.cookies.uid) { uid = req.cookies.uid; } // 其他逻辑... res.render('someTemplate', { /* ... */ }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); });
通过以上步骤,你就可以正确地从 req.cookies
中获取 Cookie,并且在渲染模板之前就能读取到这些 Cookie。希望这能帮助你解决问题!
找到原因了,分享给大家 You need to use express.cookieParser() before app.router; middleware is run in order, meaning it’s never even reaching cookieParser() before your route is executed.
app.set(‘views’, __dirname + ‘/views’); app.set(‘view engine’, ‘jade’); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(app.router); app.use(express.static(__dirname + ‘/public’));
在Express.js中,获取客户端发送的Cookie需要正确配置中间件。req.cookies
实际上是由cookie-parser
中间件解析并填充的。如果你没有在应用中使用cookie-parser
,那么req.cookies
将始终为undefined
。
示例代码
-
安装
cookie-parser
首先确保你已经安装了
cookie-parser
:npm install cookie-parser
-
引入并使用
cookie-parser
在你的应用入口文件(如
app.js
或server.js
)中,引入并使用cookie-parser
:const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); app.use(cookieParser()); // 使用cookie-parser中间件
-
在路由中访问Cookie
现在可以在你的路由中正确地访问
req.cookies
了:exports.savePage = function (req, res) { var uid; var token; if (req.cookies) { // 确保可以访问到cookies uid = req.cookies.uid; token = req.cookies.token; } // 其他逻辑... res.render('yourTemplate', { // 模板数据 }); };
解释
cookie-parser
中间件会解析HTTP请求中的Cookie,并将其转换成一个简单的对象,存放在req.cookies
中。- 如果你在Express应用中没有添加
cookie-parser
中间件,那么req.cookies
将不会被填充,始终为undefined
。 - 确保你的客户端请求包含正确的Cookie信息。如果客户端没有设置Cookie,服务器当然无法获取到。
通过上述步骤,你应该能够正确地从req
对象中获取到Cookie。