Исключение маршрута в 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('latest')
getLatest(): string {
return 'Latest post';
}
}
Слой повесим на все адреса, кроме получения последней записи:
import {
MiddlewareConsumer,
Module,
NestModule,
RequestMethod,
} 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)
.exclude({
path: 'posts/latest',
method: RequestMethod.GET,
})
.forRoutes('{*path}');
}
}
Повесьте глобальный слой на API
работников и снимите его с одного
служебного адреса WorkerController
в WorkersModule. Остальные
страницы темы должны по-прежнему
проходить через слой.