При отлове ошибок в экспресс-маршруте, как мне обойти первый res.render, чтобы избежать ошибки «Не удается установить заголовки после их отправки клиенту»? - PullRequest
1 голос
/ 23 декабря 2019

Справочная информация: В приведенном ниже упрощенном тестовом коде используются Express и Mongoose.

Вопрос: Я настроил оператор .then, чтобы выдать ошибку для тестирования. Когда выдается исключение, мое промежуточное программное обеспечение для обработки ошибок запускается с next(), но не раньше, чем удаляется res.render('index', { doesUserExist });. Эта строка приводит к ошибке «Невозможно установить заголовки после их отправки клиенту», потому что в моей обработке ошибок также вызывается промежуточное ПО res.render('error_page', { err });. Какую часть моего кода я должен изменить, чтобы устранить ошибку?

Продолжение: Нужно ли мне больше, чем небольшое изменение в моем подходе? Использую ли я совершенно неправильный шаблон для эффективного / действенного выполнения этого действия?

app.get('/', function(req, res, next) {

    (async function() { 
        let doesUserExist = await User.exists( { name: 'steve' })
            .then( function(result) {
                throw 'simulated error';
            })
            .catch( function(error) {
                next(new Error(error));
            });
        res.render('index', { doesUserExist });
    })();
});

app.use(function(err, req, res, next) {

    res.render('error_page', { err });
});

1 Ответ

0 голосов
/ 23 декабря 2019

Вместо следующей записи возвращаем следующее (новая Ошибка (error)). Таким образом, он не выполнит никакого дополнительного кода и перейдет к промежуточному программному обеспечению ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...