2

最初にデータベースにクエリを実行し、次に結果を使用して別の 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);
})

しかし、それでは問題は解決しません。私が見つけた唯一の解決策は、キャッチを最後に移動することです。しかし、その後、障害の場所のコンテキストが失われます。

私が間違っていることについての手がかりはありますか?ありがとう、オリヴィエ

4

2 に答える 2