Несколько слоёв в Nest
Пусть перед ответом нужны два разных шага: один пишет служебный заголовок, другой отмечает время. Оба должны выполниться до метода страницы, и порядок шагов важен.
В одном вызове apply передают
несколько функций или классов.
Nest выстроит их в цепочку: сначала
отработает первый слой, затем второй,
и только потом вызовется метод
контроллера. Каждый слой по-прежнему
обязан передать управление дальше.
Покажем на примере постов:
import { NextFunction, Request, Response } from 'express';
export function postLogger(
req: Request,
res: Response,
next: NextFunction,
) {
res.setHeader('X-Post-Logger', '1');
next();
}
Второй слой добавит ещё один служебный заголовок:
import { NextFunction, Request, Response } from 'express';
export function postStamp(
req: Request,
res: Response,
next: NextFunction,
) {
res.setHeader('X-Post-Stamp', '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';
import { postStamp } from './post.stamp.js';
@Module({
controllers: [PostController],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(postLogger, postStamp)
.forRoutes('posts');
}
}
Повесьте подряд два слоя на адреса
работников в WorkersModule
вместе с WorkerController.
Оба должны записать свой заголовок
и передать управление дальше.