在nestjs中使用类验证器验证环境变量?

Posted

技术标签:

【中文标题】在nestjs中使用类验证器验证环境变量?【英文标题】:Environment variables validation with class-validator in nestjs? 【发布时间】:2020-08-09 21:10:34 【问题描述】:

如何通过 nestjs 中的类验证器验证我的环境变量?官方文档中没有示例,只有joi。但是对于 DTO,您几乎可以使用类验证器,因为接口不会在运行时编译等。而且我不想在我的应用程序中使用两个不同的验证器。

【问题讨论】:

能否提供一个环境变量示例以及如何验证它们? 【参考方案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.envEnvironment

// 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 来访问您的所有环境变量。

【讨论】:

以上是关于在nestjs中使用类验证器验证环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

.env 文件中的变量的 nestjs 问题

NestJS 环境变量未定义

NestJs:无法读取模块文件中的环境变量但能够读取服务文件?

nestJs 处理环境变量

NodeJs环境变量配置以及验证

带有 ClientsModuleOptions 的 Nestjs 环境变量