Вопрос по node.js, express – Node.js и экспресс - как читать куки, но не определено

15

Я использую ниже, чтобы установить куки, используя экспресс.

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());
});
Привет ... Я добавил код, где я добавляю парсер cookie. в разделе app.configure Tampa
Снова, чтобы попросить дополнительную информацию, используйте комментарии. Это не форум. Pickels
Привет, я добавил заголовки firebug. Tampa
Можете ли вы использовать fiddler / firebug или google chrome, и посмотреть, передается ли cookie на маршрут (где вы проверяете наличие cookie). (Проверьте заголовки HTTP-запроса HTTP). Обновление - файл cookie устанавливается правильно и передается. Так что это только то, что промежуточное ПО может работать неправильно. Можете ли вы проверить, является ли app.use (express.cookieParser ()); находится перед строкой, которая определяет app.get (где вы проверяете файл cookie)? Вы определяете app.use (cookieparser) внутри определения маршрута get? Sachin Nayak

Ваш Ответ

3   ответа
9

cookieParser) больше не поставляется вместе с Express и должна устанавливаться отдельно.

Install cookie-parser:

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

1

app.use(express.cookieParser()); вышеapp.router.

Будьте осторожны, чтоcookieParser сейчас не связан для экспресс, и вам нужно установить его отдельно, используяnpm install cookie-parser --save-dev
@FarzadYZ Почему--save-dev? Isn & APOS; т--save довольно?
@BlueEyesWhiteDragon Вы правы. Это должно быть установлено--save потому что это обязательно для производства.
28

express.cookieParser() before app.router; промежуточное программное обеспечение запущеноin orderэто означает, что он никогда не достигнет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 сейчас не связан для экспресс, и вам нужно установить его отдельно, используяnpm install cookie-parser --save-dev

Похожие вопросы