- その1 NestJSやLambdaでのnode.jsの話し
- その2 NestJSのサンプルを動かす、Hello World.
- その3 コントローラーを追加する
- その4 ControllersコントローラーでDTO (Data Transfer Object)を使う
- その5 CRUD generatorを使い modules,controller, service, dto を生成する
- その6 インターセプター
- その7 ORMでRDBデータベースを扱う
- その8 NestJSをAPI Gateway+AWS Lambdaとしてデプロイ
ドキュメント
- 公式 https://docs.nestjs.com/interceptors
- Aspect Oriented Programming
- ロジックの前、後に共通で実行する
- result, return を変える
- 例外処理する
- 基本動作を拡張する
- 関数をオーバーライドする
loggerを作成してみる
- nest cli コマンド実行
nest g interceptor common/interceptor/logging
└─src
└──common
└──interceptor
└──logging
├─logging.interceptor.ts
└─logging.interceptor.spec.ts
src/common/interceptor/logging/logging.interceptor.ts
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle();
}
}
src/users/users.controller.ts
// 略
import { Controller, Get, Post, Body, Patch, Param, Delete, UseInterceptors } from '@nestjs/common';
import { LoggingInterceptor } from '../common/interceptor/logging/logging.interceptor';
@Controller('users')
@UseInterceptors(LoggingInterceptor)
export class UsersController {
constructor(private readonly usersService: UsersService) { }
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
// 略
}
寄り道、インターセプタという便利な仕掛けがある
- 何かの処理前に共通の処理を挟む、2007~2010年頃にちょくちょく耳にした「横断的な関心事」。JavaのフレームワークSeasar2を思い出すくらいだった
- ログ出力、処理時間出力
- トランザクション管理、コネクションを新規取得するのか、既にあるコネクションを使いつづけるのか、コミットするのか、ロールバックするのか 等
- 用途は、ログ出力機能、認証と認可チェック機能等を挟む
- ビジネスロジックは挟まない