2.nest構造-コントローラ、provider


nestの構造はexpressに似ている.
  • controller
  • service(provider)
  • dto
  • ...
  • Controller-HTTPリクエストに応答する役割のクラスを処理し、サービスで実際のロジックを処理します.
    // hello.controller.ts
    import { Controller, Get, Param, Logger } from '@nestjs/common';
    import { HelloService } from './hello.service';
    
    @Controller('hello')
    export class HelloController {
      constructor(private readonly helloService: HelloService) {}
      logger: Logger = new Logger(HelloController.name);
    
      @Get()
      async showing(): Promise<string> {
        try {
          return this.helloService.showing();
        } catch (error) {
          this.logger.error(error?.message ?? '');
          throw error;
        }
      }
    
      @Get('/:content')
      async reShowing(@Param('content') content: string): Promise<string> {
        try {
          return this.helloService.reShowing(content);
        } catch (error) {
          this.logger.error(error?.message ?? '');
        }
      }
    }
    
    コントローラの@Controller() annotationであることを示します.
    この中の'hello'はルートを表しています.localhost:30000/helloです.
    生成者によってhelloServiceが注入される.これはDIと言いますが、後で確認します.
    また,エラー処理を行うためにnestのloggerをインポートすることができる.
    expressとは違って、固定的なルールがあるようです.
    httpメソッドget関数が@Get() annotationで表示され、パラメータ値が同時に追加されます.
    コントローラは、実際の論理を実行することなく、クライアントからの要求をサービスで処理して応答する機能を有する.
    Services-controller応答の具体的な論理
    import { Injectable } from '@nestjs/common';
    
    @Injectable()
    export class HelloService {
      async showing(): Promise<string> {
        return 'here is for hello page';
      }
      async reShowing(content: string): Promise<string> {
        return `${content} is re showing !!!`;
      }
    }
    
    サービスであることを示すために、@Injectable annotationと明記してください.
    これは종속성을 주입할 수 있는 클래스 입니다 - providerを意味する.
    promiseオブジェクトの非同期処理を返すことで、実際にクライアントに送信された値を返します.
    provider
    providerはほとんどの論理を処理します.
  • ユーザ認証:Guards
  • クライアントから送信されたデータフィルタ:Pipes
  • ビジネスロジック:Service or Handler
  • 異常処理:Exception Filters
  • Porvider処理中、上記の操作を実行しない場合:Interceptor
  • ミドルウェア:Expressミッドレンジと同じ

  • ミドルウェアを通過した後、ユーザーがアクセス可能なユーザーであることを確認します.(Guards)
    その後、Pipesはクライアントから送信されたデータを処理します.たとえばstring->number(Pipes)
    次に、対応するデータのビジネスロジックを実行します.(Handler, serivce)
    例外処理を行う.(Exception Filters)