最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nodejs 配置文件處理方案

 更新時間:2019年01月02日 15:19:57   作者:combine  
這篇文章主要介紹了詳解nodejs 配置文件處理方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

一般來說:一個好的項目配置應該滿足以下條件:

  1. 依賴環(huán)境:配置根據(jù)具體運行環(huán)境從相應的文件讀取
  2. 代碼分離:配置項不僅可以從配置文件讀取, 也可以從環(huán)境變量讀取,使得安全隱秘的配置項與代碼分離
  3. 易于使用:配置項應該是分層配置的,有助于查找條目和維護龐大的配置文件的,應該是容易組織和容易獲取的,比如json結構

在多人開發(fā) nodejs 項目的時候,沒有規(guī)劃好配置方案,配置文件的問題就很容易暴露出來。

痛點

在開發(fā) nodejs 的工程中,遇到過三個痛點

  1. 部署環(huán)境不同: 開發(fā)、測試、生產環(huán)境的不同,導致配置的不同
  2. 開發(fā)環(huán)境不同: 開發(fā)者的開發(fā)環(huán)境配置不同,會存在同一個配置文件配置項不同,同一文件不同內容提交,容易引起 git 沖突,影響 git 提交更新
  3. 安全地配置: 一些配置不應該明文保存在項目代碼里面,比如數(shù)據(jù)庫密碼

解決方案

部署環(huán)境不同

對于部署環(huán)境不同,相對容易解決,建立相應環(huán)境的配置文件,比如:

  1. 開發(fā)環(huán)境配置:developmentConfig.js
  2. 測試環(huán)境配置:testConfig.js
  3. 生產環(huán)境配置:productionConfig.js

再建一個config.js配置文件作為入口獲取配置,如下:

module.exports = require(`./${process.env.NODE_ENV}Config.js`)

引用配置的時候,只要引用 config.js 即可。

運行命令如下:

NODE_ENV=development node index.js

開發(fā)環(huán)境不同

對于開發(fā)環(huán)境不同,導致每個人的developmentConfig.js不同,這個不能要求別人的配置和你的一樣,這樣項目就太硬了。
我們可以把developmentConfig.js添加到.gitignore,從而從項目分離出來,再在readme.md說明如何配置developmentConfig.js。

最好是建立一個developmentConfig.example.js,并在文檔說明復制成developmentConfig.js后修改配置項符合自己的開發(fā)配置。

安全地配置
對于項目一些安全性要求高的配置項,我們應該從配置文件脫離出來,只能在當前的運行進程可以獲取, 配置文件的配置項再讀取進程的配置項值,比如數(shù)據(jù)庫密碼, 一般做法如下:
productionConfig.js

module.exports = {
  database: {
    user: process.env.user || 'root',
    password: process.env.password || 'yfwzx2019'
  }
}

而更隱秘的辦法是,你根本不知道我用環(huán)境變量覆蓋了配置項值,比如:

productionConfig.js

module.exports = {
  database: {
    user: 'root',
    password: 'yfwzx2019'
  }
}

一般人拿到了這個配置,就會以為數(shù)據(jù)庫的賬號密碼就是root、yfwzx2019,其實最后會被環(huán)境變量的值覆蓋,運行如下:

node index.js --database.user=combine --database.password=tencent2019

當然,是要做了一些處理才可以這樣配置。

實操

方案有了,我們先來介紹以下 nodejs 的配置模塊 rc模塊

rc 模塊

使用rc模塊需要定義一個appname,選擇rc模塊是因為它會盡可能多的從appname命名相關的地方讀取配置。
使用也很簡單,先實例一個 rc 配置:

var conf = require('rc')(appname, defaultConfigObject)

然后它會從下面列表合并配置,優(yōu)先級按順序合并:

  1. 命令行參數(shù):--user=root 或者對象形式賦值 --database.user=root
  2. 環(huán)境變量: 環(huán)境變量前綴為${appname}_的變量 appname_user=root 對象形式 appname_database__user=root
  3. 指定文件: node index.js --config file
  4. 默認配置文件: 從 ./ ../ ../../ ../../../等目錄查找.${appname}rc文件
  5. $HOME/.${appname}rc
  6. $HOME/.${appname}/config
  7. $HOME/.config/${appname}
  8. $HOME/.config/${appname}/config
  9. /etc/${appname}rc
  10. /etc/${appname}/config

做了個 demo, 直觀一點

var conf = require('rc')('development', {
 port: 3000,
})
console.log(JSON.stringify(conf))

// 1、直接運行
// node index.js
// { port: 3000, _: [] }

// 2、加上命令行參數(shù)
// node index.js --port=4000 --database.user=root
// { port: 4000, _: [], database: { user: 'root' } }

// 3、加上環(huán)境變量
// development_port=5000 development_database__password=yfwzx2019 node index.js 
// {"port":"5000","database":{"password":"yfwzx2019"},"_":[]}

// 4、指定配置文件:根目錄建一個配置文件 config.json, 內容如下
// {
//  "port": "6000"
// }
// node index.js --config=config.json
// {"port":"6000","_":[],"config":"config.json","configs":["config.json"]}

// 5、默認讀取 ${appname}rc 文件:根目錄見一個配置文件 .developmentrc 內容如下:
// {
//  "port": 7000 
// }
// node index.js
// {"port":7000,"_":[],"configs":[".developmentrc"],"config":".developmentrc"}

// 6、 5 和4 一起運行
// node index.js --config=config.json
// {"port":"6000","_":[],"config":"config.json","configs":[".developmentrc","config.json"]}

具體操作

看了 rc 模塊,可以滿足我們的需求,我們可以配置公共的配置項,也可以隱秘的覆蓋我們的配置項。

創(chuàng)建配置文件目錄,添加配置文件

├── config
│  ├── .developmentrc.example
│  ├── .productionrc
│  ├── .testrc
│  └── index.js

其中 .developmentrc.example 是開發(fā)環(huán)境的例子,然后開發(fā)人員參考建 .developmentrc 文件, index.js 是配置入口文件,內容如下:

let rc = require('rc')

// 因為 rc 是從 process.cwd() 向上查找 .appnamerc 文件的,我們在根目錄 config 文件夾里面的是找不到的,要改變工作路徑到當前,再改回去
var originCwd = process.cwd()
process.chdir(__dirname)
var conf = rc(process.env.NODE_ENV || 'production', {
 // 默認的共同配置
 origin: 'default',
 baseUrl: 'http://google.com/api',
 enableProxy: true,
 port: 3000,
 database: {
  user: 'root',
  password: 'yfwzx2019'
 }
})

process.chdir(originCwd)

module.exports = conf
  • 關于部署環(huán)境的不同,獲取配置通過設置環(huán)境變量NODE_ENV來適配
  • 關于開發(fā)環(huán)境的不同,在.gitignore添加config/.developmentrc,項目代碼去掉開發(fā)環(huán)境配置.developmentrc,開發(fā)人員根據(jù).developmentrc.example建直接的開發(fā)配置.developmentrc
  • 關于安全地配置,通過添加環(huán)境變量覆蓋默認值,可以安全隱秘地覆蓋配置項,比如:
NODE_ENV=production node index.js --database.password=tencent2019

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Node.js?全局變量無法掛載問題解決分析

    Node.js?全局變量無法掛載問題解決分析

    這篇文章主要為大家介紹了Node.js?全局變量無法掛載問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)

    Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)

    這篇文章介紹了Node.js實現(xiàn)壓縮與解壓數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • node通過npm寫一個cli命令行工具

    node通過npm寫一個cli命令行工具

    本篇文章主要介紹了node通過npm寫一個cli命令行工具 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Angularjs---項目搭建圖文教程

    Angularjs---項目搭建圖文教程

    下面小編就為大家?guī)硪黄狝ngularjs---項目搭建圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Node爬取大批量文件的方法示例

    Node爬取大批量文件的方法示例

    這篇文章主要介紹了Node爬取大批量文件的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Node.js Sequelize如何實現(xiàn)數(shù)據(jù)庫的讀寫分離

    Node.js Sequelize如何實現(xiàn)數(shù)據(jù)庫的讀寫分離

    Sequelize是一個易于使用,支持多SQL方言(dialect)的對象-關系映射框架(ORM),這個庫完全采用JavaScript開發(fā)并且能夠用在Node.JS環(huán)境中。它當前支持MySQL, MariaDB, SQLite 和 PostgreSQL 數(shù)據(jù)庫。在Node.js中,使用 Sequelize操作數(shù)據(jù)庫時,同樣支持讀寫分離。
    2016-10-10
  • nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解

    nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解

    這篇文章主要介紹了nodejs連接mysql數(shù)據(jù)庫,結合實例形式總結分析了nodejs連接與操作mysql數(shù)據(jù)庫的相關模板、配置及mysql數(shù)據(jù)庫查詢、添加數(shù)據(jù)等操作技巧,需要的朋友可以參考下
    2018-03-03
  • Node.js之http模塊的用法

    Node.js之http模塊的用法

    這篇文章主要介紹了Node.js之http模塊的用法,對Node.js感興趣的同學,可以參考下
    2021-04-04
  • npm?install安裝失敗常見問題的解決辦法小結

    npm?install安裝失敗常見問題的解決辦法小結

    有時候前端安裝npm install 安裝包總是安裝不上,下面這篇文章主要給大家介紹了關于npm?install安裝失敗常見問題的解決辦法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 詳解用node.js實現(xiàn)簡單的反向代理

    詳解用node.js實現(xiàn)簡單的反向代理

    本篇文章主要介紹了詳解用node.js實現(xiàn)簡單的反向代理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

宁武县| 女性| 渭南市| 峡江县| 锡林浩特市| 长宁县| SHOW| 林口县| 尼玛县| 两当县| 襄垣县| 天等县| 顺昌县| 边坝县| 台湾省| 白城市| 珲春市| 鹤庆县| 博乐市| 大城县| 阳谷县| 炎陵县| 镇巴县| 鄂托克旗| 兴化市| 临沭县| 乳山市| 柳河县| 志丹县| 泽普县| 嘉祥县| 浠水县| 闽侯县| 如皋市| 南郑县| 扶风县| 永城市| 吉木乃县| 鄂托克前旗| 滦南县| 镇远县|