diff --git a/nest-start/src/app.module.ts b/nest-start/src/app.module.ts index b2c7927..28f720f 100644 --- a/nest-start/src/app.module.ts +++ b/nest-start/src/app.module.ts @@ -1,11 +1,16 @@ -import { Module } from "@nestjs/common"; +import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common"; import { AppController } from "./app.controller"; import { AppService } from "./app.service"; import { CatsModule } from "./cats/cats.module"; +import { LoggerMiddleware } from "./logger/logger.middleware"; @Module({ imports: [CatsModule], controllers: [AppController], providers: [AppService], }) -export class AppModule {} +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + consumer.apply(LoggerMiddleware).forRoutes("*"); + } +} diff --git a/nest-start/src/logger/logger.middleware.spec.ts b/nest-start/src/logger/logger.middleware.spec.ts new file mode 100644 index 0000000..677d413 --- /dev/null +++ b/nest-start/src/logger/logger.middleware.spec.ts @@ -0,0 +1,7 @@ +import { LoggerMiddleware } from './logger.middleware'; + +describe('LoggerMiddleware', () => { + it('should be defined', () => { + expect(new LoggerMiddleware()).toBeDefined(); + }); +}); diff --git a/nest-start/src/logger/logger.middleware.ts b/nest-start/src/logger/logger.middleware.ts new file mode 100644 index 0000000..f5bed6f --- /dev/null +++ b/nest-start/src/logger/logger.middleware.ts @@ -0,0 +1,17 @@ +import { Injectable, Logger, NestMiddleware } from "@nestjs/common"; +import { Request, Response, NextFunction } from "express"; + +@Injectable() +export class LoggerMiddleware implements NestMiddleware { + private logger = new Logger("HTTP"); + + use(req: Request, res: Response, next: NextFunction) { + res.on("finish", () => { + this.logger.log( + `${req.ip} ${req.method} ${res.statusCode} ${req.originalUrl}`, + ); + }); + + next(); + } +}