最初にデータベースにクエリを実行し、次に結果を使用して別の Web サービスにクエリを実行し、その結果でページをレンダリングする必要があるルートがあります。私はそのフローを解決し、エラー処理を理解しようとしています。私は複数のサービスと話しているので、それらを表現する前にエラーをマッサージしようとしています。
ルートのコードの構造は次のとおりです。
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);
})
しかし、それでは問題は解決しません。私が見つけた唯一の解決策は、キャッチを最後に移動することです。しかし、その後、障害の場所のコンテキストが失われます。
私が間違っていることについての手がかりはありますか?ありがとう、オリヴィエ