我想要将环境变量加载到我的Express应用程序的通用config中。在本地,我使用.env文件,但在部署时,我会将env变量注入到docker容器中。
因此,我得到了一个带有一些硬编码配置值的default.json。然后我得到了custom-environment-variables.json文件,如下所示:
"app": {
"nodeEnv": "NODE_ENV",
"port": "PORT",
"hostname": "HOSTNAME"
}
"mongoDb": {
"connectionString": "MONGODB_CONNECTION_STRING"
},
"redis": {
"connectionString": "REDIS_CONNECTION_STRING"
},
"logDna": {
"key": "LOGDNA_KEY"
}和我的项目根目录中的一个.env文件。
在服务器初始化文件中,我得到:
import * as dotenv from 'dotenv';
dotenv.config();
import * as config from 'config';
console.log(process.env);
console.log(config);我还试着按正常顺序放置它们:
import * as config from 'config';
import * as dotenv from 'dotenv';
dotenv.config();我尝试的另一件事是将app声明与服务init和app start分开。就像在app.ts中一样
import * as App from 'express';
import * as dotenv from 'dotenv';
dotenv.config();
console.log(process.env);
const app = new App();
export app;然后在index.ts中
import app from './app';
import * as config from 'config';
console.log(config);
// app.use() and other inits
app.listen(...);但无济于事。.env文件已加载,我可以在process.env中看到var,但custom-environment-variables.json中的config不会加载它们。F.e.加载nodeEnv、port和hostname变量。但是它们在应用程序启动之前被加载到容器中。
这让我想到了在dotenv模块从.env文件加载值之前先加载config。从本质上讲,这个问题似乎只存在于DEV环境中,因为它是我从.env文件中加载环境变量的唯一位置。对于任何其他环境,它们甚至在应用程序启动之前就已经出现在容器环境中。
我可以强制重新加载config吗?
如何实现这一点有什么建议吗?
发布于 2019-11-18 22:51:25
https://stackoverflow.com/questions/58911497
复制相似问题