應用場景:node
最近用 node 重構了網站的項目,部署到測試環境的時候測試一切正常。
直到有一天,運維把代碼上線到內測環境的時候......
忽然發現:內測環境和測試環境居然是同一臺服務器,只不過是把代碼放在了兩個不臺的位置而已~
這樣的話,在同一臺服務器部署兩個同樣的 node 應用,端口必然衝突,就會致使 node 啓動報錯。
那怎麼辦呢?有沒有什麼辦法可讓測試環境和內測環境用兩個不一樣的端口?
左思右想......
有了,能夠增長配置文件來解決這個問題。
1、創建配置文件目錄windows
首先,各個環境的配置信息是不同的,咱們在 nodejs 根目錄新建一個 config 目錄,建立保存各個環境配置信息的文件:服務器
(1). 自動載入相應環境配置信息的文件:index.jsapp
(2). 測試環境:test.js運維
(3). 內測環境:beta.js測試
目錄結構如圖:網站
2、各個配置文件寫入各自配置信息ui
(1). index.jsspa
var path = require('path'), env = process.env.NODE_ENV.toLowerCase(), // 經過 NODE_ENV 來設置環境變量 file = path.resolve(__dirname, env); // 載入配置文件
try { var config = module.exports = require(file); console.log('Load config: [%s] %s', env, file); } catch (err) { console.error('Cannot load config: [%s] %s', env, file); throw err; }
(2). test.jscode
module.exports = { port: 1337 }
(3). beta.js
module.exports = { port: 1338 }
3、設置 NODE_DEV
(1). 測試環境項目下運行 export NODE_DEV=test
(2). 內測環境項目下運行 export NODE_DEV=beta
(注:若是是 windows 系統,請把 export 改爲 set)
4、應用入口文件增長配置信息
假設應用入口爲 app.js,咱們須要在頁面裏增長相關配置信息
var config = require('./config'), // 配置文件 port = config.port; console.log('listen on port', config.port);
5、啓動 node 應用
(1). 測試環境會讀取 test.js 裏的配置信息,也就是會應用 1337 端口;
(2). 內測環境會讀取 beta.js 裏的配置信息,也就是會應用 1338 端口;
關於 process.env.NODE_ENV, 能夠參考這篇文章: