Node.js + express.js + everyauth.jsを使用しています。すべてのeveryauthロジックをモジュールファイルに移動しました
var login = require('./lib/everyauthLogin');
この中に、キーと秘密の組み合わせでoAuth構成ファイルをロードします。
var conf = require('./conf');
.....
Twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
これらのコードは環境によって異なります-コールバックは異なるURLであるため、開発/ステージング/プロダクション。
Qu。すべてのモジュールをフィルタリングするように環境設定でこれらを設定する方法、またはモジュールにパスを直接渡すことができますか?
env:に設定
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
パスイン
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
?それが理にかなっていることを願って
私の解決策、
を使用してアプリをロードする
NODE_ENV=production node app.js
次に、config.js
をオブジェクトではなく関数としてセットアップします
module.exports = function(){
switch(process.env.NODE_ENV){
case 'development':
return {dev setting};
case 'production':
return {prod settings};
default:
return {error or other settings};
}
};
次に、Jansソリューションに従ってファイルをロードし、必要に応じて値を渡すことができる新しいインスタンスを作成します。この場合、process.env.NODE_ENV
はグローバルなので、不要です。
var Config = require('./conf'),
conf = new Config();
次に、以前とまったく同じようにconfigオブジェクトのプロパティにアクセスできます
conf.Twitter.consumerKey
また、NODE_ENVを最上位に持つJSONファイルを作成することもできます。 IMO、これは(設定を返すスクリプトを使用するのではなく)構成設定を表現するより良い方法です。
var config = require('./env.json')[process.env.NODE_ENV || 'development'];
Env.jsonの例:
{
"development": {
"MONGO_URI": "mongodb://localhost/test",
"MONGO_OPTIONS": { "db": { "safe": true } }
},
"production": {
"MONGO_URI": "mongodb://localhost/production",
"MONGO_OPTIONS": { "db": { "safe": true } }
}
}
非常に便利な解決策は、 config module を使用することです。
モジュールをインストールした後:
$ npm install config
default.json構成ファイルを作成できます。 (拡張子.json5を使用してJSONまたはJSオブジェクトを使用できます)
例えば
$ vi config/default.json
{
"name": "My App Name",
"configPath": "/my/default/path",
"port": 3000
}
このデフォルト設定は、環境設定ファイルまたはローカル開発環境のローカル設定ファイルによって上書きされる可能性があります。
production.json:
{
"configPath": "/my/production/path",
"port": 8080
}
development.json:
{
"configPath": "/my/development/path",
"port": 8081
}
ローカルPCでは、local.jsonを使用してすべての環境をオーバーライドするか、local-production.jsonまたはlocal-development.json。
完全な ロード順のリスト 。
アプリ内
アプリでは、設定と必要な属性のみが必要です。
var conf = require('config'); // it loads the right file
var login = require('./lib/everyauthLogin', {configPath: conf.get('configPath'));
アプリをロード
次を使用してアプリをロードします。
NODE_ENV=production node app.js
またはforeverまたはpm2で正しい環境を設定する
Forever:
NODE_ENV=production forever [flags] start app.js [app_flags]
PM2(シェル経由):
export NODE_ENV=staging
pm2 start app.js
PM2(.json経由):
process.json
{
"apps" : [{
"name": "My App",
"script": "worker.js",
"env": {
"NODE_ENV": "development",
},
"env_production" : {
"NODE_ENV": "production"
}
}]
}
その後
$ pm2 start process.json --env production
このソリューションは非常にクリーンであり、本番/ステージング/開発環境用とローカル設定用に異なる設定ファイルを簡単に設定できます。
この種のセットアップはシンプルでエレガントです:
env.json
{
"development": {
"facebook_app_id": "facebook_dummy_dev_app_id",
"facebook_app_secret": "facebook_dummy_dev_app_secret",
},
"production": {
"facebook_app_id": "facebook_dummy_prod_app_id",
"facebook_app_secret": "facebook_dummy_prod_app_secret",
}
}
common.js
var env = require('env.json');
exports.config = function() {
var node_env = process.env.NODE_ENV || 'development';
return env[node_env];
};
app.js
var common = require('./routes/common')
var config = common.config();
var facebook_app_id = config.facebook_app_id;
// do something with facebook_app_id
本番モードで実行するには:$ NODE_ENV=production node app.js
このソリューションは、http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for- dev-slash-prod-environment /、詳細を確認してください。
エレガントな方法は、.env
ファイルを使用して、プロダクション設定をローカルでオーバーライドすることです。コマンドラインスイッチは不要です。 config.json
ファイル内のすべてのコンマとブラケットは不要です。 ここに私の答えを見てください
例:私のマシンでは、.env
ファイルは次のとおりです。
NODE_ENV=dev
Twitter_AUTH_TOKEN=something-needed-for-api-calls
ローカルの.env
は、環境変数をオーバーライドします。しかし、ステージングサーバーまたは運用サーバー(heroku.comにある可能性があります)では、NODE_ENV=stage
または運用NODE_ENV=prod
をステージングするための環境変数が事前に設定されています。
これを行う方法は、環境でアプリを起動するときに引数を渡すことです。例えば:
node app.js -c dev
App.jsでは、構成ファイルとしてdev.js
をロードします。 optparse-js でこれらのオプションを解析できます。
これで、この構成ファイルに依存するいくつかのコアモジュールができました。あなたがそれらをそのように書くとき:
var Workspace = module.exports = function(config) {
if (config) {
// do something;
}
}
(function () {
this.methodOnWorkspace = function () {
};
}).call(Workspace.prototype);
そして、次のようにapp.js
で呼び出すことができます:
var Workspace = require("workspace");
this.workspace = new Workspace(config);
nodejs-config モジュールを使用して、これをよりエレガントな方法で実行してみてください。
このモジュールは、コンピューターの名前に基づいて構成環境を設定できます。その後、構成を要求すると、環境固有の値が取得されます。
たとえば、pc1とpc2という名前の2つの開発マシンとpc3という名前の本番マシンがあるとします。 pc1またはpc2のコードで設定値を要求するときは、「開発」環境設定を取得する必要があり、pc3では「本番」環境設定を取得する必要があります。これは次のように実現できます。
次に、次の構文で新しい構成インスタンスを作成します。
var config = require('nodejs-config')(
__dirname, // an absolute path to your applications 'config' directory
{
development: ["pc1", "pc2"],
production: ["pc3"],
}
);
これで、次のような環境を心配することなく、任意の構成値を取得できます。
config.get('app').configurationKey;