Справочная информация: В приведенном ниже упрощенном тестовом коде используются 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 });
});