REST API with NestJs を作成したいのですが、後でGraphQLを別のトップレベルレイヤーとして追加したいと思います。そのため、最初に基本レイヤーを用意しますコントローラ、サービス、およびTypeORMリポジトリ。IDでユーザーのユーザー名を更新するとします。コントローラーのルートは
PATCH /users/:id/username
サービスまたはリポジトリ層で2つの問題が発生する可能性があります。
この操作の基本的な流れは
これらのエラーをどのように処理すべきかを考えています。この概念に基づいてすぐに例外をスローすることができました
https://en.wikipedia.org/wiki/Fail-fast
NestJsには、すぐに使える例外がいくつかあります
https://docs.nestjs.com/exception-filters#built-in-http-exceptions
問題は、サービスレイヤーでHTTP例外をスローするべきではないと思うことです。それらは私のコントローラーロジックでスローする必要があります。では、これらのエラーの一般的なアプローチは何ですか?
undefined
を返すだけですか?コントローラーは、どの部分が失敗したのかを知りません。Error
を拡張する独自の例外を作成してスローする必要がありますか?<User | NotFoundError | ConflictError>
?サービス層でHTTP固有の例外をスローするべきではないと言うのは正しいです。サービス層には、httpに関する知識は必要ありません。
ほとんどのサーバーフレームワークには、トップレベルの例外ハンドラーとエラー処理ミドルウェアがあります。その最上位の例外ハンドラーは、コードで処理されない例外をキャッチし、500内部サーバーエラーを返す可能性があります。
通常、それをカスタマイズして、それがこの言語レベルの例外である場合は、このhttp応答を使用して大丈夫と言うことができます。 (System.Collections.Generic)KeyNotFoundExceptionをスローすると、asp.netの例のように、使用しているフレームワークがわからないため、トップレベルで404を返します。これは完全ではありませんが、二。
ここを見てください: https://docs.nestjs.com/exception-filters