本系列教程将教你使用 NestJS 构建一个生产级别的 REST API 风格的权限管理后台服务【代码仓库地址】。
【在线预览地址】账号:test,密码:d.12345
本章节内容: 1. Helmet;2. 接口限流。
Helmet
helmet 库可以通过适当设置 HTTP 标头来帮助保护你的应用免受一些众所周知的 Web 漏洞的侵害。
提示:请注意,将
helmet应用为全局或注册它必须先于对app.use()的其他调用或可能调用app.use()的设置函数。
首先安装所需的包:
pnpm add helmet
然后在 /src/main.ts 中引入:
接口限流
安装相应库
运行以下命令,安装 @nestjs/throttler 库。
pnpm add @nestjs/throttler
添加配置
打开 .env.development 文件并添加以下配置:
# throttle
THROTTLE_TTL=10000
THROTTLE_LIMIT=30
然后再在 /src/common/config/index.ts 的 getBaseConfig 方法返回的对象中添加以下配置:
throttle: {
ttl: +configService.get<number>('THROTTLE_TTL'),
limit: +configService.get<number>('THROTTLE_LIMIT'),
},
异步配置节流阀
打开 app.module.ts 文件并添加以下内容:
...
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
@Module({
imports: [
...
ThrottlerModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => [
{
ttl: getBaseConfig(config).throttle.ttl,
limit: getBaseConfig(config).throttle.limit,
},
],
}),
],
providers: [
{
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
...
],
})
export class AppModule {}
现在我们就为所有接口加上了一个10秒内不能超过30次请求的限制。