NestJS Interceptorについて
NestJSのInterceptorを理解するために、この文章を書きます.
Nestの公式文書では、Interceptorは
@Injectable()
と注釈されたクラスです.最近の受信者インタフェースを実装する必要があります.Interceptorは,視点向けプログラミング(AOP)技術からインスピレーションを得て生まれた多様な機能を持つ優れた集合である.受信者:
変換
と記述する.
コードから見ると
import {
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from '@nestjs/common';
import { Observable, map } from 'rxjs';
@Injectable()
export class UndefinedToNullInterceptor implements NestInterceptor {
intercept(
context: ExecutionContext,
next: CallHandler<any>,
): Observable<any> | Promise<Observable<any>> {
//Controller 가기 전 부분
return (
next
.handle()
//handle()다음부분은 Controller 실행되고 난 후 부분
.pipe(map((data) => (data === undefined ? null : data)))
);
}
}
上のコードを見て、Interceptorとして指定されたクラスはImplementsを行う必要があります.Interceptorには2つのパラメータのブロック方法が含まれています.
最初のパラメータcontextは多くの機能を提供します.
2番目のパラメータCallHandlerは、ルーティングハンドラメソッドを呼び出す際に使用されるhandle()メソッドを含む.
戻る前にコードを挿入すると、コントローラに入る前にデータを操作して変換できます.
handle()メソッドの後に実行される部分は、コントローラが実行する部分データを操作および変換することができる.
上のコードは、データが定義されていない場合にnullに変更したり、直接データを送信したりするコードです.
受信機は主に最後にデータを再加工するために使用される.
pipeにはErrorも含まれています.ExceptionFilterで理解してみましょう.
import {
Body,
Controller,
Get,
HttpException,
Post,
Req,
Res,
UseInterceptors,
} from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { User } from 'src/common/decorator/user.decorator';
import { UserDto } from 'src/common/dto/user.dto';
import { UndefinedToNullInterceptor } from 'src/common/interceptors/undefinedToNull.interceptor';
import { JoinRequestsDto } from './dto/join.request.dto';
import { UsersService } from './users.service';
@UseInterceptors(UndefinedToNullInterceptor)
@ApiTags('USER')
@Controller('api/users')
export class UsersController {
constructor(private usersService: UsersService) {}
//@UseInterceptors(UndefinedToNullInterceptor) 개별 Route Interceptor
@ApiResponse({
type: UserDto,
})
@ApiOperation({ summary: '내 정보 조회' })
@Get()
getUsers(@User() user) {
return user;
}
}
アクセプタは取り付ける必要があります.コントローラに@UseInterceptors()
個のディスプレイを取り付けるだけでいいです.コントローラ全体に適用したり、単一のルータに適用したりできます.
Reference
この問題について(NestJS Interceptorについて), 我々は、より多くの情報をここで見つけました https://velog.io/@h0ngwon/NestJS-Interceptor-알아보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol