2017-10-15 106 views
1

基於這個答案這裏https://stackoverflow.com/a/22524056/777700我已經設置完全相同的配置選項,但它不起作用。nodeJS開發和生產環境配置文件加載

我的(局部的)app.js文件:

console.log('environment: '+process.env.NODE_ENV); 

const config = require('./config/db.json')[process.env.NODE_ENV || "development"]; 

console.log(config); 

我./config/db.json文件:

{ 
    "development":{ 
     "host":"localhost", 
     "port":"3306", 
     "username":"root", 
     "password":"", 
     "database":"dbname" 
    }, 
    "production":{ 
     "host":"production-host", 
     "port":"3306", 
     "username":"user", 
     "password":"pwd", 
     "database":"dbname" 
    } 
} 

CONSOLE.LOG輸出:

environment: development 
undefined 

和應用程序崩潰。任何想法爲什麼?文件在那裏,如果我刪除require()的一部分,它會打印出db.json文件,並用它打印出未定義的文件。

編輯 我嘗試添加console.log(typeof config)只是需要()後,看看有什麼我得到我已經注意到,如果我require('./config/db.json')[process.env.NODE_ENV]我得到undefined,但如果我require('./config/db.json')["development"]我找回正確的對象。

版本:

nodeJS 6.11.4 
express 4.16.2 
+0

請告訴我你在嘗試什麼,因爲它好像你還沒有定義你的NODE_ENV環境值... –

+0

它應該在你的bashrc文件中,或者你可以像這樣'''NODE_ENV = development node app.js' ' –

回答

0

經過更多的在線調試和搜索,我終於找到了解決方案。問題是我在Windows機器上,而我正在使用npm run dev命令,而我的「dev」命令看起來像SET NODE_ENV=development && nodemon server.js

有經驗的眼睛會前& &,這增加了空間的變量development後面發現一個空間,所以我是比較反對的變量是"development ",而不是作爲"development"我也是這麼想的。

所以,從其他問題的原始答案確實工作,它會加載適當的配置!

0

你應該配置導出爲一個變量:

const config = { 
    "development":{ 
     "host":"localhost", 
     "port":"3306", 
     "username":"root", 
     "password":"", 
     "database":"dbname" 
    }, 
    "production":{ 
     "host":"production-host", 
     "port":"3306", 
     "username":"user", 
     "password":"pwd", 
     "database":"dbname" 
    } 
}; 
module.exports = config; 

這樣就會發現:)

+0

我無法將module.exports添加到JSON文件中... –

+0

只需使用.js擴展名 –

0

如果你想通過JSON做到這一點:

const fs = require('fs') 
let localConfig 

try { 
    localConfig = JSON.parse((fs.readFileSync('./config/db.json', 'utf-8')) 
} catch (e) { 
    console.log('Could not parse local config.') 
    localConfig = false 
} 

module.exports = localConfig 

您c然後添加生產邏輯,如果沒有本地配置,localConfig將返回false,並且您可以查找在該點注入的環境變量。

更新:

我看到你給生產配置自己,在這種情況下,你可以訪問你需要根據環境的關鍵。只需導入localConfig並使用您需要的鍵。