Node.js和express – 如何读取一个cookie,但未定义

我使用下面的expression来设置一个cookie。

res.cookie('test', 'yes', { expires: new Date(Date.now() + 365*2*24*60*60*1000), httpOnly: true }); 

我正在使用中间件来尝试读取cookie:

 app.use(express.cookieParser()); var cookie_id = req.cookies.test; 

问题是,cookie_id是不确定的,而这将是“是”

 Express server listening on port 8060 in development mode TypeError: Cannot read property 'test' of undefined at /home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/app.js:48:29 at callbacks (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/lib/router/index.js:272:11) at param (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/lib/router/index.js:246:11) at pass (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/lib/router/index.js:253:5) at Router._dispatch (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/lib/router/index.js:280:4) at Object.handle (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/lib/router/index.js:45:10) at next (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/node_modules/connect/lib/http.js:204:15) at Object.methodOverride [as handle] (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:35:5) at next (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/node_modules/connect/lib/http.js:204:15) at Object.bodyParser [as handle] (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/nodeServer/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:88:61) 

我做错了什么?

 Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language en-us,en;q=0.5 Connection keep-alive Cookie test=yes Host 127.0.0.1:8060 User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0 
 // Configuration app.configure(function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); app.use(express.cookieParser()); }); 

你需要 app.router 之前使用express.cookieParser() ; 中间件是按顺序运行 ,这意味着它在执行路由之前甚至都不会到达cookieParser()

尝试这个:

  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')); 

大多数中间件(如cookieParser)不再与Express捆绑在一起,必须单独安装。

安装cookieparsing器

 npm install cookie-parser 

用法

 var express = require('express') var cookieParser = require('cookie-parser') var app = express() app.use(cookieParser()) 

https://github.com/expressjs/cookie-parser

我解决了它通过添加app.use(express.cookieParser());app.router