Слой на контроллер в Nest
У темы несколько методов под одним префиксом, и слой нужен на каждый из них. Перечислять адреса по одному долго, а префикс строкой не всегда совпадает с тем, как собран класс страницы.
Вместо строки в цепочку передают сам класс контроллера. Nest возьмёт из него все зарегистрированные адреса, и слой сработает на каждый метод этого класса.
Покажем на примере постов:
import { NextFunction, Request, Response } from 'express';
export function postLogger(
req: Request,
res: Response,
next: NextFunction,
) {
res.setHeader('X-Post-Logger', '1');
next();
}
Контроллер открывает список и отдельную карточку под тем же префиксом:
import { Controller, Get } from '@nestjs/common';
@Controller('posts')
export class PostController {
@Get()
getPosts(): string {
return 'All posts';
}
@Get(':id')
getPost(): string {
return 'One post';
}
}
Слой повесим на класс контроллера:
import {
MiddlewareConsumer,
Module,
NestModule,
} from '@nestjs/common';
import { PostController } from './post.controller.js';
import { postLogger } from './post.logger.js';
@Module({
controllers: [PostController],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(postLogger).forRoutes(PostController);
}
}
Подключите слой ко всем адресам
WorkerController в модуле
WorkersModule.