日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nodejs简单层级结构配置文件

發(fā)布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nodejs简单层级结构配置文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在NodeJS中使用配置文件,有幾種比較不錯的方案:
第一種:文件格式使用json是毋容置疑的好方案。格式標(biāo)準(zhǔn),易于理解,文件內(nèi)容讀取到內(nèi)存之后,使用JSON的標(biāo)準(zhǔn)分析函數(shù)即可得到配置項(xiàng)。
第二種:將配置文件做成模塊。其內(nèi)容格式完全可以整合成一個object,然后將其導(dǎo)出。在NodeJS中require引入后,可以直接訪問配置項(xiàng)。
第三種:使用Ini格式或者類XML的配置文件。這樣的配置文件后臺開發(fā)司空見慣,格式清晰,也不失是一種比較好的方法。

由于最近一個項(xiàng)目需要在NodeJS中讀取分析后臺生成的類XML配置文件,所以湊周末時間寫了一個簡單層級配置文件的解析類。封裝后發(fā)布到npmjs,供有需要的同學(xué)一起使用。01.簡單層級配置文件格式 //定義主配置文件 <main><log>filepath = /data/app/logsfilename = svrrequest.log</log>//定義可用的服務(wù)端IP地址<server><ipinfo>host = 192.168.10.58port = 28000</ipinfo><ipinfo>host = 192.168.25.26port = 14000</ipinfo></server> </main>//定義MySQL數(shù)據(jù)庫訪問用戶和密碼 <mysql>user = adminpassword = admin@*123456% </mysql>//定義告警接收人郵件地址 email = motadou@126.com 02.使用方法 首先使用npm安裝該配置文件解析模塊: npm install mo-configure 獲取配置項(xiàng)的語法如下: //第一步,引入配置文件解析類 var configure = require("mo-configure");//第二步,創(chuàng)建一個配置文件解析類 var config = new configure();//第三步,指定配置文件路徑,或者傳入配置文件的內(nèi)容 //比如: //config.parseText('<main>email=motadou@126.com</main>') //config.get("main.email"); config.parseFile("main.conf");//例子一: configure to json //json為內(nèi)置屬性,該屬性將配置文件內(nèi)容轉(zhuǎn)換成了JSON格式的數(shù)據(jù) console.log(config.json);//例子二:有兩種方法獲取指定的配置項(xiàng) //第一種直接訪問內(nèi)部的JSON結(jié)構(gòu),但這種方法有時會拋出異常,請注意捕捉 console.log(config.json.email); console.log(config.json.main.log.filename);//第二種調(diào)用配置類的get函數(shù),該函數(shù)當(dāng)找不到配置項(xiàng)時,允許返回一個指定的默認(rèn)值 console.log(config.get("email", "not define email")) console.log(config.get("main.log.filename"));//例子三:返回一個JSON對象 var ipinfo = config.get("main.server.ipinfo"); console.log(ipinfo); 03.配置文件類的實(shí)現(xiàn) 源代碼以及后續(xù)更新請參考Github項(xiàng)目:https://github.com/motadou/mo-configure.git
主要實(shí)現(xiàn)代碼原理如下: var fs = require("fs");var configure = function () {this._data = { };this.__defineGetter__("json", function () { return this._data; }); }configure.prototype.parseText = function (sText) {var arr = sText.split(/\r\n|\r|\n/); //行劃分var stack = [this._data];for(var i = 0, len = arr.length; i < len; i++) {var line = arr[i].replace(/^[\s\t ]+|[\s\t ]+$/g, '');if (line.length == 0 || line[0] == "#") {continue;}//當(dāng)前行為當(dāng)前域下面的值if (line[0] != "<") {var options = line.split("=");var key = options[0].replace(/^[\s\t ]+|[\s\t ]+$/g, '');var value = options.length == 2?options[1].replace(/^[\s\t ]+|[\s\t ]+$/g, ''):undefined;stack[stack.length - 1][key] = value;continue;}//當(dāng)前行為域的標(biāo)識if (line[line.length - 1] != '>') {//域標(biāo)識符有開頭但沒有結(jié)尾,則分析錯誤this.data = {};return false;}//當(dāng)前行為域的結(jié)束if (line[1] == "/") {stack.pop();continue;}//當(dāng)前行為域的開始var key = line.substring(1, line.length - 1);var parent = stack[stack.length - 1];if (parent.hasOwnProperty(key)) {//在當(dāng)前域中已經(jīng)有相同名字的域if (parent[key] instanceof Array) {parent[key].push({});} else {parent[key] = [parent[key], {}];}stack.push(parent[key][parent[key].length - 1]);} else {parent[key] = {};stack.push(parent[key]);}} }configure.prototype.parseFile = function (sFilePath, encoding) {var data = fs.readFileSync(sFilePath, encoding?encoding:"utf8");this.parseText(data); }configure.prototype.toJson = function() {return this._data; }configure.prototype.get = function (key, DEFAULT_VALUE) {key = key.replace(/[\s\t ]+/g, '');key = key.replace(/\.{2,}/g, '.');var paths = key.split('.');var parent = this._data;for (var i = 0, len = paths.length; i < len; i++) {if (!parent.hasOwnProperty(paths[i])){return DEFAULT_VALUE;}if (i == len - 1) {return parent[paths[i]];}parent = parent[paths[i]];} }module.exports = configure;

轉(zhuǎn)載于:https://www.cnblogs.com/motadou/p/3886007.html

總結(jié)

以上是生活随笔為你收集整理的nodejs简单层级结构配置文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。