如何使用node-config整合Heroku环境变量?代码优化咨询
用node-config整合Heroku环境变量的正确姿势
我之前也折腾过类似的需求,其实按照node-config的设计思路,完全可以把Heroku的环境变量无缝整合到配置文件里,不用在业务代码里写process.env的判断逻辑,代码会更整洁。
具体操作步骤很简单:
- 创建自定义环境变量映射文件
在你的config目录下新建一个custom-environment-variables.json文件,这个文件的作用就是把Heroku的环境变量和你的配置结构做映射。针对你的MySQL场景,配置内容如下:
{ "MySQL": { "connection": "CLEARDB_DATABASE_URL" } }
这里的逻辑很直接:把Heroku提供的CLEARDB_DATABASE_URL环境变量,映射到你配置里的MySQL.connection节点上。
- 保留本地开发的默认配置
在你的常规配置文件(比如config/default.json)里,依然可以保留本地开发用的数据库连接信息:
{ "MySQL": { "connection": "mysql://your-local-user:password@localhost:3306/your-db" } }
- 简化代码逻辑
这时候你的代码就不用再写那个三元判断了,直接调用config.get即可:
module.exports.getMySQL = () => { return config.get('MySQL').connection; }
node-config会自动帮你处理优先级:在Heroku环境中,CLEARDB_DATABASE_URL环境变量存在,就会用它的值;本地开发时没有这个环境变量,就会 fallback 到default.json里的默认配置,完全不用自己写判断逻辑。
另外要注意,Heroku上的CLEARDB_DATABASE_URL环境变量通常添加ClearDB插件后会自动生成,你也可以在Heroku后台手动配置,node-config会自动识别这个映射关系,不需要额外做其他设置。
内容的提问来源于stack exchange,提问作者user9473709
相关产品推荐
相关产品推荐

