Почему промежуточное ПО для обработки ошибок Express не получает req.session? - PullRequest
0 голосов
/ 24 марта 2020

Среда: node.js, Express, express -сессионный пакет.

Справочная информация: Я тестировал обработчик ошибок Express и Я получил ошибку, которую не ожидал.

Следующий упрощенный маршрут выдает ошибку.

TypeError: Невозможно прочитать свойство 'userValues' из неопределенного

exports.errorHandler = wrapAsync(async function(error, req, res, next) {

    let loggedIn = req.session.userValues ? true : false;

    res.render('error', { loggedIn });
});

Однако, когда я удаляю параметр error, он работает без ошибок, как я ожидал.

exports.errorHandler = wrapAsync(async function(req, res, next) {

    let loggedIn = req.session.userValues ? true : false;

    res.render('error', { loggedIn });
});

Почему это может быть?

* 1023 Шаблон * basi c во втором примере работает на нескольких десятках маршрутов, которые не содержат параметр ошибки.

1 Ответ

1 голос
/ 24 марта 2020

Вы можете использовать что-то вроде этого. И он будет выполняться только всякий раз, когда есть ERROR 500, если вы не передали ERROR 404 этому с помощью функции next(), если вы правильно обработали все ошибки, вы сможете сделать ERROR 500, и это должно быть в состоянии catch, что ERROR.

const errorHandler = require("./your-file");

...
... every other route even error 404 handler
...

app.use(errorHandler);

Что я имею в виду, используя next() для ERROR 404

Если вы использовали express-generator, то вы уже должны иметь этот кусок code:

// catch 404 and forward to error handle
app.use((req, res, next) => {
    next('not found');
});

Конечный файл должен выглядеть примерно так сейчас, если вы используете этот подход:

...
... all previous routes
...

// catch 404 and forward to error handle
app.use((req, res, next) => {
    next('not found');
});

// handle all other error
app.use(errorHandler);

Надеюсь, это поможет

...