![](/img/trans.png)
[英]How to set an environment variable in config.js of a node.js microservice?
[英]overriding config.js variables for express/node app based on environment
我有一個config.js,其中包含所有變量設置。
我想創建一個config.global.js並讓config.production.js覆蓋其中的一些,而config.development.js覆蓋其中的一些。
這是一個示例config.development.js:
var config = {};
config.env = 'development';
config.hostname = 'example.dev';
config.appname = 'Example.com';
config.site_url = 'http://example.dev:8080';
module.exports = config;
我想我可以在config.development.js(和config.production.js)中執行此操作以覆蓋:
var config = require('config.global.js');
config.env = 'development';
config.hostname = 'example.dev';
config.appname = 'Example.com';
config.site_url = 'http://example.dev:8080';
module.exports = config;
然后在app.js中,我可以這樣做:
var cfg = require('config.' + ( process.ENV.APP_ENV || 'development' ) + '.js');
app.set('domain', cfg.hostname);
定義應用程序配置變量的其他方法有哪些?
為什么不使用具有所有環境設置的一個JSON文件。 當您引入更多環境時,您的方法可能無法很好地擴展。 通過查找NODE_ENV屬性並使用它從您的環境中選擇屬性集,可以獲取正確的屬性集。
不久前,我在Bootstraping適用於Dev / Prod環境的Node.js應用程序中寫了有關它的博客。 請具體閱讀“ 在測試期間模擬生產環境 ”以獲取有關操作方法的示例。
如果遵循himanshu的建議並使用單個配置文件,則可以使用原型繼承來避免重復:
var config = {};
config.base = {};
config.base.env = 'development';
config.base.hostname = 'example.dev';
config.base.appname = 'Example.com';
config.base.site_url = 'http://example.dev:8080';
config.development = Object.create(config.base);
config.development.debugLevel = 'high';
...
config.production = Object.create(config.base);
config.production.debugLevel = 'low';
...
module.exports = config;
Object.create()
是一個ES5函數,它使用指定的原型創建一個新的空對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.