[NestJS]ベースコントローラとは?


開始...


react、react-nativeを使用してWebアプリケーションとモバイルアプリケーションの開発を開始し、バックエンドの設計と実装をより多くの機会を提供します.
以前はnodejsexpressを使って開発していた時にnestjsに触れ、多くの面で魅力を感じていましたが、現在はonly nestjsのみでバックエンド開発を行っています.
今日,nestjs docsを用いてnestjsルーティングメカニズムcontroller classをまとめた.

Definition


Contollers are responsible for handling Incoming request and Returning response to the Client
コントローラは、サーバが受信した特定のリクエストを受信することを目的としています.1つのルーティングコントローラは、異なる機能を実行することができる複数の内部ルーティングパスを有することができる.
一般的に、CRUDを実行するモジュールのコントローラであれば、少なくとも4つの内部ルーティングパスが作成されたのを覚えています.

上図は、https://docs.nestjs.com/controllersにおけるコントローラの役割の概略図である.
よく見ると、クライアントはユーザが対話するモバイル/Webアプリケーションであり、ユーザはサーバに特定の要求を出す(支払い、ログイン...)行うと、予め定められた要求タイプに応じて経路が決定され、中間制御ローラに入る.

ルーティングの理解


実際,コードを記述してサーバに要求することでnestjsにおけるコントローラの動作を理解した.
import { Controller, Get } from '@nestjs/common';

@Controller('test')
export class TestController {
  @Get()
  getAll() {
    return 'get /test 요청은 싹다 받는다.';
  }

  @Get('case-a')
  getAllCaseA() {
    return 'get /test/case-a 요청은 싹다 받는다.';
  }

  @Get('case-b')
  getAllCaseB() {
    return 'get /test/case-b 요청은 싹다 받는다.';
  }
}
testcontroller classはdecorator@controller(「test」)とともに、decoratorの部分については後で単独で勉強したほうがいいと宣言しています.

サーバを実行しpostmanでリクエストを送信すると、getAllメソッドで定義された戻り値が返されることがわかります.

コードには3つのパスがあります.
1./test
2./test/case-a
3./test/case-b
コントローラへの経路に経路接頭辞を付けると,3種類の定義が見られる.パスを指定する方法は、@Get("パス")でパス接頭辞を貼り付けることができます.
これにより、クライアントからのリクエストをパス接頭辞で必要なパス名に関連付けることができます.

リクエスト・オブジェクト


docsに記述されるリクエストオブジェクト(以下、reqと略す)は、express api docsに記述されるHTTPリクエストオブジェクトである.
reqにはquery string,params,body,HTTPヘッダなどが含まれる.
コントローラを使用する場合、リクエストに必要な処理を実行するために、リクエストに含まれる詳細要素にアクセスする必要があることがよくあります.この場合、nestjsのコントローラがどのように処理されているかをコードで知ることができます.
import {
  Body,
  Controller,
  Get,
  Header,
  Param,
  Post,
  Query,
} from '@nestjs/common';

@Controller('test')
export class TestController {
  @Get('profile-query')
  getUserProfileQuery(@Query('id') id: string) {
    return `user id is ${id}`;
  }

  @Get('profile-param/:id')
  getUserProfileParam(@Param('id') id: string) {
    return `user id is ${id}`;
  }

  @Post('profile-body')
  postUserProfileBody(@Body('id') id: string) {
    return `user id is ${id}`;
  }
}
上記のコードから,1番目のパスはreqのqueryを取得し,2番目のパスはreqのparamを取得し,最後のパスはreqのbodyを取得することが分かる.
メソッドのパラメータ定義セクションでは、nestjsのデフォルトで提供されるコーディネータ@Query()、@Param()、および@Body()を使用します.
実はexpressの経験を考えるとbody.id=@Body("id")idですが、アクセサリーでのアクセスをサポートしなければなりませんか?
この部分は後でnestjsのミドルウェアを勉強して、少し解決したようです.REST APIを厳格に実施するために、reqのquery paramとbodyはとても気を遣うと思います.
レコーダを使用してreqの詳細を明記するため、チェックタイプと検証に多くの便利さを提供しているのではないかと考え始めました.コードを見ているとreqの特性が一目でわかるのも目的でしょう

いずれにしても、上記のようにDecoratorでreqの詳細にアクセスできます!
ここではベースコントローラの概念ですが、
1.Promise、Observable、Controller
2. body payload (with dto..)
3. exception handling
4. header, redirection
ちょっと待って、別に整理したほうがいいです.