У меня есть маршрут, который сначала нужно запросить базу данных, затем с результатами запросить другую веб-службу, а затем с этим результатом отобразить страницу. У меня есть этот поток, и я пытаюсь разобраться в обработке ошибок. Учитывая, что я говорю с несколькими службами, я пытаюсь массировать ошибку, прежде чем возвращать их, чтобы выразить.expressJS обещание и обработка ошибок
Здесь структура кода маршрута:
Models.Episode.findById(request.params.episodeID)
.catch(function (error) {
throw (throwjs.notFound());
})
.then(function (episode) {
if (episode.getUser().id !== request.user.href) {
return next(throwjs.unauthorized("You do not have access to this podcast"));
}
return doSomeOtherAsyncStuff();
})
.then(function (queryResponse) {
renderPage();
})
.catch(function (error) {
next(error);
});
Моя проблема с первым уловом. Моя цель в этом улове состоит в том, чтобы переупаковать ошибку и остановить выполнение и отправить ошибку, чтобы выразить промежуточное ПО.
С тем, как написано выше, выполнение останавливается, но мой экспресс-обработчик ошибок не вызывается.
Я пытался переписывать первый улов, как
.catch(function(error){
return next(error);
})
Но это не решает проблему. Единственное решение, которое я нашел, - это переместить уловку до конца. Но тогда я теряю контекст места сбоя.
Любая подсказка относительно того, что я делаю неправильно? Спасибо, Olivier
Вы действительно переписали первый улов, как в своем примере? потому что есть опечатка. – Seth
@Seth Хорошая точка, я повторил, чтобы убедиться, что с опечаткой исправлено и получила ту же проблему. – otusweb
@ t.niese, имея уловку в начале потока, я знаю, что единственное, что не удалось, - это утверждение выше. Если я добавлю улов только внизу, то я не уверен, что случилось – otusweb