Общий лимит в Nest
Защитник уже стоит на каждом адресе, но без явной политики в модуле счётчик не к чему привязать. Клиент может обходить отдельные страницы, если лимит задан только на одном контроллере.
В массиве настроек
ThrottlerModule.forRoot
указывают ttl в миллисекундах
и limit как максимум
обращений за это окно. Одна запись
в массиве действует везде, где
срабатывает общий защитник,
включая новые контроллеры.
Покажем на примере постов:
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 { 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([
{
ttl: 60000,
limit: 10,
},
]),
],
controllers: [PostController],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
],
})
export class AppModule {}
Задайте одно общее правило
частоты в корневом модуле
приложения работников с
WorkerController, чтобы
оно действовало на все адреса API.