Node.js 和 express - 如何读取 cookie 但未定义

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10645792/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 15:43:15  来源:igfitidea点击:

Node.js and express - how to read a cookie but is undefined

node.jsexpress

提问by Tampa

I use the below to set a cookie using express.

我使用下面的内容来使用 express 设置 cookie。

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

I am using the middleware to try and read the cookie:

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

app.use(express.cookieParser());

var cookie_id = req.cookies.test;

Problem is that cookie_id is undefined whne it would be 'yes'

问题是 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)

What did I do wrong?

我做错了什么?

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());
});

回答by Ashe

You need to use express.cookieParser()beforeapp.router; middleware is run in order, meaning it's never even reaching cookieParser()before your route is executed.

您需要使用express.cookieParser()之前app.router; 中间件按顺序运行,这意味着它cookieParser()在您的路线执行之前甚至永远不会到达。

Try this:

尝试这个:

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

回答by sqren

Most middleware (like cookieParser) is no longer bundled with Express and must be installed separately.

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

Install cookie-parser:

安装 cookie 解析器

npm install cookie-parser

Usage

用法

var express      = require('express')
var cookieParser = require('cookie-parser')

var app = express()
app.use(cookieParser())

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

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

回答by Nader Dabit

I solved it by adding app.use(express.cookieParser());above the app.router.

我通过app.use(express.cookieParser());app.router.