0
0

More than 1 year has passed since last update.

NestJSをAPI Gateway + AWS Lambdaで構成する(その6)インターセプター

Last updated at Posted at 2023-08-13

ドキュメント

  • 公式 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を思い出すくらいだった
    • ログ出力、処理時間出力
    • トランザクション管理、コネクションを新規取得するのか、既にあるコネクションを使いつづけるのか、コミットするのか、ロールバックするのか 等
  • 用途は、ログ出力機能、認証と認可チェック機能等を挟む
  • ビジネスロジックは挟まない
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0