我有一个节点应用程序运行部署在 heroku 上的快速服务器。我正在使用 postgres 数据库 (node-postgres),并且当前为应用程序配置了远程数据库的连接字符串。
我创建了数据库的本地版本,并且我想将应用程序配置为在本地主机上运行应用程序时使用不同的连接字符串。
我需要以某种方式检测我在哪个服务器上,然后将 conString 放入 if/else 类型的语句中。有什么想法或例子吗?我很难找到正确的解决方案。
我有一个节点应用程序运行部署在 heroku 上的快速服务器。我正在使用 postgres 数据库 (node-postgres),并且当前为应用程序配置了远程数据库的连接字符串。
我创建了数据库的本地版本,并且我想将应用程序配置为在本地主机上运行应用程序时使用不同的连接字符串。
我需要以某种方式检测我在哪个服务器上,然后将 conString 放入 if/else 类型的语句中。有什么想法或例子吗?我很难找到正确的解决方案。
为此,您应该使用标准的 NodeJS 环境变量 - NODE_ENV
。
它应该development
在您的本地计算机上设置为。在您的生产服务器上,它通常默认为production
,就像在 Heroku 上一样:NODE_ENV=production
然后,您可以通过process.env.NODE_ENV
. 这将告诉您您的应用程序在哪个环境中运行,以及您应该使用两个连接中的哪一个。
我会推荐kconfig。在名为 config 的文件夹中创建一个名为 database.js 的文件,从您的应用程序中包含它,然后 konfig 进行环境切换。
例子
配置/数据库.json:
{
"development": {
"postgresql": {
"connection_string": "postgres://user:pass@localhost/development"
}
},
"production": {
"postgresql": {
"connection_string": "postgres://user:pass@ec2.compute-1.amazonaws.com/sdfk23jf"
}
}
}
应用程序.js:
...
var config = require('konfig')().database.connection_string;
...
在命令行上运行服务器时使用 NODE_ENV,即
NODE_ENV=production node app.js
并且 konfig 会自动进行切换,我认为它默认使用“开发”。