2014-05-17 6 views
1

Я перенесла свое приложение из Express.js 3.x в 4.x. Я сделал все изменения, описанные в руководстве по миграции. К сожалению, когда я пытаюсь получить сеанс из объекта запроса, он не определен.Express.js 4.x session undefined после миграции из 3.x

То есть, как я установил express.js, насколько печенье парсера и сессии обеспокоены:

app.use(cookieParser()); 
app.use(session({ 
    secret: config.sessionSecret, 
    cookie: { path: '/', httpOnly: false, secure: false, maxAge: null } 
})); 

Тогда, когда я пытаюсь получить сеанс из запроса:

req.session.cookie.maxAge 

сессия является неопределенной. Я понятия не имею, почему. Есть идеи?

ответ

0

Наконец выяснить, что там было два app.use():

app.use(function (err, req, res, next) { 
    console.error(err.stack); 
    res.status(500).write('500'); 
    res.end(); 
}); 

app.use(function (req, res, next) { 
    res.sendfile(config.root + '/html/404.html'); 
}); 

после старого:

app.use(app.router); 

, который удаляется в 4.x версии. И после тех app.use() были определения маршрутов.

Я пропустил это при переносе, чтобы выразить 4.x все вызовы app.use() должны быть перемещены после всех маршрутов. Когда я это сделал, все в порядке.

0

Начиная с 4.0, много промежуточного программного обеспечения больше не поставляется с Express. См. migration docs. Вам нужно npm install --save express-session и app.use require.

+0

Как я уже говорил, я это сделал. Я сделал все изменения, описанные в документах миграции. – Damian

+0

В этом случае проверьте, заданы ли маршруты до или после промежуточного программного обеспечения сеанса. Если маршруты на первом месте, у них, вероятно, нет требования. Сдвиньте все вокруг и посмотрите, не изменилось ли это. –

+0

Я сделал раньше. Все еще неправильно. – Damian

Смежные вопросы