Ответ при превышении в Nest
Клиент шлёт обращения подряд и ждёт очередной успешный ответ с данными. Когда счётчик за окно уже исчерпан, сервер не должен молча отдавать тело страницы как при обычном запросе.
Общий защитник сравнивает текущий
счёт с лимитом из модуля. При
превышении он прерывает цепочку
и выбрасывает исключение ограничения:
клиент получает отказ с текстом
ошибки, а метод контроллера
не выполняется. Текст можно
задать в настройке модуля через
поле errorMessage.
Покажем на примере постов:
import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
import { PostController } from './post.controller.js';
@Module({
imports: [
ThrottlerModule.forRoot({
throttlers: [
{
ttl: 60000,
limit: 3,
},
],
errorMessage: 'Too many requests',
}),
],
controllers: [PostController],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
],
})
export class AppModule {}
Контроллер списка без изменений:
import { Controller, Get } from '@nestjs/common';
@Controller('posts')
export class PostController {
@Get()
getPosts(): string {
return 'All posts';
}
}
Настройте сообщение отказа
при превышении лимита в корневом
модуле с WorkerController,
чтобы после серии лишних
обращений клиент получал отказ,
а не тело списка работников.