ウェブサイト検索

javascript - NestJSでHttpServiceの呼び出しのエラーを再スローする方法は?


私はNestJSを使用して、基本的にリクエストを別のAPIにプロキシするためにHttpService(ObservableでラップされたAxiosライブラリ)を使用しています。例としては次の通りです:

return this.httpService.post(...)
  .pipe(
    map(response => response.data),
  );

これは呼び出しが成功した場合に正しく機能します。しかし、エラー(4xx)が発生した場合、ステータスとエラーメッセージを正しく返すにはどうすればよいですか?

私はそれをプロミスで行う方法を見つけましたが、可能であればオブザーバブルの範囲内でやりたいです。

回答 #1

対応するステータスコードで例外を再スローするために、catchError を使用できます:

import { catchError } from 'rxjs/operators';

this.httpService.get(url)
      .pipe(
        catchError(e => {
          throw new HttpException(e.response.data, e.response.status);
        }),
      );

注意:error.response は null である可能性があります。すべてのエラーケースについては axios のドキュメントを参照して確認してください。

また、Axiosは4xxエラーに対して例外を投げません。なぜなら、それらはAPIからの期待される有効なレスポンスである場合があるからです。この動作はvalidateStatusを設定することでカスタマイズできます。詳細はドキュメントを参照してください。

関連記事