Middleware is a function which is called before the route handler. Middleware functions have access to the request and response objects, and the
next()
middleware function in the application’s request-response cycle. The next middleware function is commonly denoted by a variable namednext
.
Client Side와 Route Handler의 중간 다리 역할을 맡는다.
Middleware functions can perform the following tasks:
next()
to pass control to the next middleware function. Otherwise, the request will be left hanging.App.module에 이 내용을 추가해준다.
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggingMiddleware).forRoutes('*');
}
}
middlewares/logging.middleware.ts
import { Logger, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
export class LoggingMiddleware implements NestMiddleware {
private readonly logger = new Logger();
use(req: Request, res: Response, next: NextFunction) {
const { method, originalUrl } = req;
const startTime = Date.now();
res.on('finish', () => {
const { statusCode } = res;
const responseTime = Date.now() - startTime;
this.logger.log(
`[${method}]${originalUrl}:${statusCode} - ${responseTime}ms`,
);
});
next();
}
}