Функция промежуточного слоя в Nest
Пусть перед каждым ответом нужно добавить один служебный заголовок, а метод страницы должен заниматься только текстом для клиента. Дублировать запись заголовка в каждом методе неудобно.
Слой можно описать обычной функцией с тремя параметрами: запрос, ответ и колбэк передачи дальше. Тип колбэка берут из пакета Express. Внутри функции меняют ответ и вызывают передачу, чтобы цепочка не оборвалась.
Модуль собирает цепочку через
MiddlewareConsumer: указывают
функцию и адреса, где она сработает.
Покажем на примере постов:
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';
}
}
В корневом модуле подключим слой к адресам списка:
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('posts');
}
}
Сделайте функциональный слой
для адресов работников и подключите
его в WorkersModule вместе
с WorkerController. Слой
должен записать служебный заголовок
в ответ и передать управление
дальше.