반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- nestjs
- operator
- @Binding
- SwiftUI
- @EnvironmentObject
- Operators
- RFC1738/1808
- graphql
- init
- swift6
- Xcode
- SWIFT
- NavigationLink
- URL(string:)
- Creating Operators
- @Environment
- ios14
- vim
- @State
- Operater
- init?
- subject
- NullObject
- dismiss
- typeorm
- IOS
- RxCocoa
- Bug
- nonisolated
- RxSwift
Archives
- Today
- Total
Tunko Development Diary
[NestJS]Middleware 생성 및 사용 본문
Documentation | NestJS - A progressive Node.js framework
NestJS 의 Middleware 는 Express 의 형태와 동일하다.
Middleware 의 기능
- 모든 코드에서 실행이 가능하다.
- Request , Response 를 변경할 수 있다.
- Request , Response 를 종료할 수 있다.
- 다음 Middleware를 호출한다.
- 종료하지 않는 경우 다음 Middleware 를 nest() 를 호출해 실행한다.
Middleware 클래스 생성
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Request...');
next();
}
}
미들웨어 클래스에선 NestMiddleware 를 인터페이스로 사용해야 된다.
그리고 NestMiddleware 내부의 정의된 use 함수를 정의 해주어야 한다.
@Injectable() 를 통해서 Dependency injection이 가능하도록한다. 이는 모든 모듈에서 사용이 가능하도록 하기위함이다.
특정 모듈에서 Middleware 클래스 사용
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes({ path: 'cats', method: RequestMethod.GET });
}
}
AppModule 에서 사용한 형태이며
NestModule 을 인터페이스로 선언하고
configure(consumer: MiddlewareConsumer) 함수를 구현해준다.
내부의 forRoutes 를 통해 특정 라우터와 메소드 형태에서만 반응할 수 있는 미들웨어로 등록이 가능하다.
함수형 Middleware 생성
import { Request, Response, NextFunction } from 'express';
export function logger(req: Request, res: Response, next: NextFunction) {
console.log(`Request...`);
next();
};
위 코드는 미들웨어 함수를 선언한것이다.
클래스로 생성했을때와 큰 차이는 NestMiddleware 인터페이스를 사용하지 않고 그냥
use 함수의 매개변수 형태를 동일하게 선언되어 있다.
함수형 Middleware 의 사용 (1)
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(logger)
.forRoutes(/*모듈 클래스*/);
}
}
함수형 Middleware 의 사용 (2)
const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);
글로벌로 모든 라우팅에서 생성한 logger 란 미들웨어를 사용할 수 있다.
반응형
'Development > Nest.js' 카테고리의 다른 글
[NestJS, GraphQL, typeORM]GraphQL Enum Column 생성 (0) | 2021.04.24 |
---|---|
[NestJS][GraphQL] mapped-types 정리 (2) | 2021.04.14 |
[NestJS] [TypeOrm] Active Record 패턴vs Data Mapper 패턴 (0) | 2021.04.13 |
[NestJS] Configuration 환경변수 설정 [@nestjs/config, cross-env, joi] (0) | 2021.04.10 |
[Nest.js][GraphQL] 기반 postgres DB 설치 (0) | 2021.04.10 |
Comments