nodejs簡單層級結構配置檔案

2022-11-24 22:01:37 字數 2716 閱讀 4825

在nodejs中使用配置檔案,有幾種比較不錯的方案:

第一種:檔案格式使用json是毋容置疑的好方案。格式標準,易於理解,檔案內容讀取到記憶體之後,使用json的標準分析函式即可得到配置項。

第二種:將配置檔案做成模組。其內容格式完全可以整合成一個object,然後將其匯出。在nodejs中require引入後,可以直接訪問配置項。

第三種:使用ini格式或者類xml的配置檔案。這樣的配置檔案後臺開發司空見慣,格式清晰,也不失是一種比較好的方法。

由於最近一個專案需要在nodejs中讀取分析後臺生成的類xml配置檔案,所以湊週末時間寫了一個簡單層級配置檔案的解析類。封裝後釋出到npmjs,供有需要的同學一起使用。01.簡單層級配置檔案格式

//定義主配置檔案

filename = svrrequest.log

//定義可用的服務端ip地址

host = 192.168.10.58

port = 28000

host = 192.168.25.26

port = 14000

//定義mysql資料庫訪問使用者和密碼

user = admin

password = [email protected]*123456%

//定義告警接收人郵件地址

email = [email protected]

02.使用方法 首先使用npm安裝該配置檔案解析模組:
npm install mo-configure
獲取配置項的語法如下:
//第一步,引入配置檔案解析類

var configure = require("mo-configure");

//第二步,建立一個配置檔案解析類

var config = new configure();

//第三步,指定配置檔案路徑,或者傳入配置檔案的內容

//比如:

'[email protected]')

"main.email");

config.parsefile("main.conf");

//例子一: configure to json

//json為內建屬性,該屬性將配置檔案內容轉換成了json格式的資料

console.log(config.json);

//例子二:有兩種方法獲取指定的配置項

//第一種直接訪問內部的json結構,但這種方法有時會丟擲異常,請注意捕捉

console.log(config.json.email);

console.log(config.json.main.log.filename);

//第二種呼叫配置類的get函式,該函式當找不到配置項時,允許返回一個指定的預設值

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.配置檔案類的實現 源**以及後續更新請參考github專案:

主要實現**原理如下:

var fs = require("fs");

var configure = function () ;

this.__definegetter__("json", function () );

}configure.prototype.parsetext = function (stext)

//當前行為當前域下面的值

if (line[0] != "<")

//當前行為域的標識

if (line[line.length - 1] != '>') ;

return false;

}//當前行為域的結束

if (line[1] == "/")

//當前行為域的開始

var key = line.substring(1, line.length - 1);

var parent = stack[stack.length - 1];

if (parent.hasownproperty(key)) );

} else ];

}stack.push(parent[key][parent[key].length - 1]);

} else ;

stack.push(parent[key]);}}

}configure.prototype.parsefile = function (sfilepath, encoding)

configure.prototype.tojson = function()

configure.prototype.get = function (key, default_value) /g, '.');

var paths = key.split('.');

var parent = this._data;

for (var i = 0, len = paths.length; i < len; i++)

if (i == len - 1)

parent = parent[paths[i]];

}}module.exports = configure;