这边有个问题!
来源:8-4 两种nestjs数据库解决方案:mongoose与typeorm(1)

慕粉3946981
2023-06-15
使用 import { ConfigModule } from '@nestjs/config';
读取到配置文件中的变量是保存到了 configService
中的
而配置验证是验证的 process.env 中的变量
ConfigModule.forRoot({
isGlobal: true, // 声明为全局模块
load: [Configuration],
validationSchema: Joi.object({ // 验证的是 process.env 中的变量
// db: {
// mysql: {
// NODE_ENV: Joi.string().valid('development1', 'production'),
// port: Joi.number()
// }
// }
USERDOMAIN: Joi.number()
})
如果通过 load + dotent 来将配置设置到 process.env 中,也有个问题就是 dotenv 读取出来的都是字符串。
希望的效果是读取 config 文件夹下面的 yml 文件,并且可以使用 validationSchema 验证。
1回答
-
关于config校验,官方的意思是,需要自己来进行校验,可以借助第三方的库来完成。
给你一个思路:
在AppModule或者main.ts中加入一个函数;
使用config库对环境变量yml进行解析;
使用第三方校验库,比如:validator.js, yup之类的进行校验,并抛出异常
我个人强烈建议,使用业界比较认同的.env的方式,为什么呢?原因有以下几条:
.env好扫描好过滤,而json或者yml是资源文件,不好通过打包工具进行全项目过滤(因为有的时候会产生比如mainfest.json或者自己的项目中有.json的资源文件);
yml虽然有嵌套结构,但是实际上使用与校验的时候,非常麻烦,你自己想想? config.aa.bb.cc.dd或者 config['aa']['bb']['cc']
参考.env最新的load结合的校验方式https://git.imooc.com/coding-617/nestjs-lesson/commit/f3be7e87a13d5c5355ee40014fefb9ef4a94d1c1?style=split 写起来还是比较简单的,校验也比较清晰
132023-06-17
相似问题