3

heroku にデプロイされたエクスプレス サーバーを実行するノード アプリケーションがあります。私は postgres データベース (node-postgres) を使用しており、現在、リモート データベースの接続文字列を使用してアプリケーションを構成しています。

データベースのローカル バージョンを作成しました。ローカル ホストでアプリを実行するときに別の接続文字列を使用するようにアプリケーションを構成したいと考えています。

どのサーバーにいるのかをどうにかして検出し、conString を if/else のようなステートメントに入れる必要があります。アイデアや例はありますか?適切な解決策を見つけるのに苦労しました。

4

2 に答える 2

3

そのためには、標準の NodeJS 環境変数 - を使用する必要がありますNODE_ENV

developmentローカル マシンでに設定する必要があります。また、本番サーバーではproduction、Heroku の場合と同様に、通常はデフォルトでNODE_ENV=productionに設定されています。

その後、アプリから 経由でアクセスできますprocess.env.NODE_ENV。これにより、アプリが実行されている環境がわかるため、2 つの接続のどちらを使用する必要があるかがわかります。

于 2015-09-04T18:20:39.753 に答える
1

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

konfig は自動的に切り替えを行います。デフォルトでは「開発」を使用していると思います。

于 2015-09-04T18:35:09.470 に答える