Middleware
- module 파일에 다음과 같이 사용
-
MiddlewareConsumer
를 import 해서 사용한다
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.exclude( // 제외할 미들웨어 경로 set
{ path: 'cats', method: RequestMethod.GET },
{ path: 'cats', method: RequestMethod.POST },
'cats/(.*)', // exclude, forRoutes 경로에 와일드카드를 사용할 수 있다
.forRoutes('cats');
}
}
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();
}
}
Global middleware
- 미들웨어를 글로벌하게 사용하고 싶으면 main에서
app.use()
를 사용한다.
const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);
Helmet
- 웹서버를 외부의 공격으로부터 보호해주는 대표적인 노드 보안 모듈
- 여러 보안 미들웨어 모듈을 합쳐 놓은 express 패키지 모듈이다.
- 사용법(기본 설정)
app.use(helmet());
- 효과
- dnsPrefetchControl
- frameguard
- hidePoweredBy
- hsts
- ieNoOpen
- noSniff
- xssFilter
- 등등의 보안 관련 ..
Share article