可以全局设置或者在相应模块下设置,如果全局设置需在 app.module
$ npm i --save @nestjs/throttler
// 全局引入为例 app.module.ts‘
@Module({
imports: [ThrottlerModule.forRoot({
ttl: 30, //设置默认30s允许请求2次,超出返回429 code错误
limit: 2,
})],
controllers: [AppController],
providers: [AppService],
})import {APP_GUARD} from "@nestjs/core";
import {ThrottlerGuard, ThrottlerModule} from "@nestjs/throttler";
@Module({
imports: [ThrottlerModule.forRoot({
ttl: 30,
limit: 2,
})],
controllers: [AppController],
providers: [AppService,{
provide: APP_GUARD,
useClass: ThrottlerGuard
}]
})// user.controller.ts
import {Throttle} from "@nestjs/throttler";
export class UserController {
constructor(private readonly userService: UserService) {
}
@Throttle(2, 30) //手动设置30s允许请求2次,超出返回429 code错误
@Post('/submit')
@UsePipes(new ValidationPipe({transform: true}))
submit(@Body() body: Person) {
return this.userService.submit(body);
}
}引入ThrottlerModule.forRoot ( ) 参数可以为空,为空时需要在相应控制器路由指定阈值 Throttle,如果设置了默认阈值参数,那么即适用于当前模块下的所有路由,如果想排除某一路由,则可以使用 SkipThrottle 装饰器,如下:
import {SkipThrottle} from "@nestjs/throttler";
@SkipThrottle()
@Get('/')
@UsePipes(new ValidationPipe({transform: true}))
index(@Query() query: Person) {
return this.userService.index(query);
}www.haizhuan.tk