这边有个问题!

来源: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回答

Brian

2023-06-15

关于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
3
Brian
回复
慕粉3946981
https://git.imooc.com/coding-617/nestjs-lesson/commit/0e64545a47808a70e1972a8d75f4820f01d393c2?style=split
2023-06-17
共3条回复

NestJS 入门到实战 前端必学服务端新趋势

近几年快速发展的Node.js框架,掌握未来前端工程师后端开发能力

569 学习 · 238 问题

查看课程