【问题标题】:Loopback 4: Specify environment var in the @modelLoopback 4:在@model 中指定环境变量
【发布时间】:2020-12-18 16:04:59
【问题描述】:

我正在尝试从 .env 中定义的环境变量中获取 mongodb 集合名称。看起来模型是在读取 .env 之前初始化的。

@model({
  name: 'MyType',
  settings: {
    mongodb: process.env.COLLECTION_NAME,
  },
})

此时,process.env.COLLECTION_NAME 未定义

有什么方法可以将集合名称外部化? 非常感谢您的帮助。

【问题讨论】:

    标签: mongodb environment-variables loopback4


    【解决方案1】:

    默认情况下,Node.js 不会从 .env 读取。

    要读取.env,我们需要使用dotenv 包。

    由于模型在启动时通过Booter解析,因此我们需要在app.boot()之前调用dotenv.config()

    更新index.ts如下:

    // At the top of the file
    import dotenv from 'dotenv';
    
    ...
    
    // Inside the main function
    // dotenv.config() must appear before app.boot()
    
    dotenv.config()
    ...
    app.boot();
    app.start();
    

    这将导致dotenv 在必要时用.env 中的值覆盖process.env

    延伸阅读:

    【讨论】:

    • Thanks Rifa. Using dotenv, ok elsewhere in the project. The problem is with the model. Looks like this is executed before the .env is read. The example code here: const mongodbCollection = { collection: process.env.COLLECTION_NAME ?? 'my_collection', }; console.log(process.env.COLLECTION_NAME);我正在控制台上: undefined Server is running at 127.0.0.1:8080/dev/project/v1 Try 127.0.0.1:8080/dev/project/v1/ping 这(未定义)显示模型在 .env 读取之前已初始化`
    • 再次感谢。试过了,还是“未定义”
    【解决方案2】:

    在你的

    src/index.ts

    import {ApplicationConfig, MyApplication} from './application';
    require('dotenv').config();
    export * from './application';
    

    以及您项目“根”中的 .env 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2016-12-25
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多