【问题标题】:Environment variables validation with class-validator in nestjs?在nestjs中使用类验证器验证环境变量?
【发布时间】:2020-08-09 21:10:34
【问题描述】:
如何通过 nestjs 中的类验证器验证我的环境变量?官方文档中没有示例,只有joi。但是对于 DTO,您几乎可以使用类验证器,因为接口不会在运行时编译等。而且我不想在我的应用程序中使用两个不同的验证器。
【问题讨论】:
标签:
typescript
environment-variables
nestjs
class-validator
class-transformer
【解决方案1】:
您可以使用class-validator 创建环境架构类:
// environment.ts
import {Injectable} from '@nestjs/common';
import {IsFQDN, IsString} from 'class-validator';
@Injectable()
export class Environment {
@IsFQDN()
DATABASE_HOST: string;
@IsString()
DATABASE_USERNAME: string;
@IsString()
DATABASE_PASSWORD: string;
}
然后将自定义提供程序添加到您的模块,该提供程序将验证 process.env 与 Environment。
// app.module.ts
import {Module} from '@nestjs/common';
import {transformAndValidateSync} from 'class-transformer-validator';
import {Environment} from './environment';
@Module({
imports: [
// Imports
],
controllers: [
// Controllers
],
providers: [
{provide: Environment, useValue: transformAndValidateSync(Environment, process.env)}
],
})
export class AppModule {}
现在您应该能够注入 Environment 来访问您的所有环境变量。