请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这边有个问题!

使用 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校验,官方的意思是,需要自己来进行校验,可以借助第三方的库来完成。

给你一个思路:

  1. 在AppModule或者main.ts中加入一个函数;

  2. 使用config库对环境变量yml进行解析;

  3. 使用第三方校验库,比如:validator.js, yup之类的进行校验,并抛出异常

我个人强烈建议,使用业界比较认同的.env的方式,为什么呢?原因有以下几条:

  1. .env好扫描好过滤,而json或者yml是资源文件,不好通过打包工具进行全项目过滤(因为有的时候会产生比如mainfest.json或者自己的项目中有.json的资源文件);

  2. yml虽然有嵌套结构,但是实际上使用与校验的时候,非常麻烦,你自己想想? config.aa.bb.cc.dd或者 config['aa']['bb']['cc']

  3. 参考.env最新的load结合的校验方式https://git.imooc.com/coding-617/nestjs-lesson/commit/f3be7e87a13d5c5355ee40014fefb9ef4a94d1c1?style=split 写起来还是比较简单的,校验也比较清晰

1 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3946981 #1
    老师,你这个地方有bug,load 里面通过 dotenv 来加载配置文件到 process.env 中,这个 dotenv 加载出来的都是字符串,那 validationSchema 中验证类型就有问题。
    回复 有任何疑惑可以回复我~ 2023-06-15 19:28:08
  • 提问者 慕粉3946981 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2023-06-16 16:18:56
  • Brian 回复 提问者 慕粉3946981 #3
    https://git.imooc.com/coding-617/nestjs-lesson/commit/0e64545a47808a70e1972a8d75f4820f01d393c2?style=split
    回复 有任何疑惑可以回复我~ 2023-06-17 12:49:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信