【问题标题】:Node/Express app-- how to change connection string (node-postgress) based on localhost vs. remote serverNode/Express 应用程序——如何根据 localhost 与远程服务器更改连接字符串(node-postgres)
【发布时间】:2015-11-30 23:17:05
【问题描述】:

我有一个节点应用程序运行部署在 heroku 上的 express 服务器。我正在使用 postgres 数据库 (node-postgres),并且当前为应用程序配置了远程数据库的连接字符串。

我创建了一个本地版本的数据库,我想将应用程序配置为在本地主机上运行应用程序时使用不同的连接字符串。

我需要以某种方式检测我在哪个服务器上,然后将 conString 放入 if/else 类型的语句中。有什么想法或例子吗?我很难找到正确的解决方案。

【问题讨论】:

    标签: node.js heroku express node-postgres


    【解决方案1】:

    为此,您应该使用标准的 NodeJS 环境变量 - NODE_ENV

    它应该在您的本地机器上设置为development。在您的生产服务器上,它通常默认为 production,就像在 Heroku 上一样:NODE_ENV=production

    然后您可以通过process.env.NODE_ENV 从您的应用程序访问它。这将告诉您您的应用在哪个环境中运行,以及您应该使用两个连接中的哪一个。

    【讨论】:

      【解决方案2】:

      我会推荐konfig。在名为 config 的文件夹中创建一个名为 database.js 的文件,将其从您的应用中包含进来,然后 konfig 进行环境切换。

      示例

      config/database.json:

      {
        "development": {
          "postgresql": {
            "connection_string": "postgres://user:pass@localhost/development"
          }
        },
        "production": {
          "postgresql": {
            "connection_string": "postgres://user:pass@ec2.compute-1.amazonaws.com/sdfk23jf"
          }
        }
      }
      

      app.js:

      ...
      var config = require('konfig')().database.connection_string;
      ...
      

      在命令行上运行服务器时使用 NODE_ENV,即

      NODE_ENV=production node app.js
      

      并且kconfig会自动进行切换,我认为它默认使用“开发”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-13
        • 2020-01-07
        • 1970-01-01
        • 2015-01-29
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多