• nodejs读取配置文件


    INI.js(模块)

    var eol = process.platform === "win32" ? "
    " : "
    "
     
    function INI() {
        this.sections = {};
    }
     
    /**
     * 删除Section
     * @param sectionName
     */
    INI.prototype.removeSection = function (sectionName) {
     
        sectionName =  sectionName.replace(/[/g,'(');
        sectionName = sectionName.replace(/]/g,')');
     
        if (this.sections[sectionName]) {
            delete this.sections[sectionName];
        }
    }
    /**
     * 创建或者得到某个Section
     * @type {Function}
     */
    INI.prototype.getOrCreateSection = INI.prototype.section = function (sectionName) {
     
        sectionName =  sectionName.replace(/[/g,'(');
        sectionName = sectionName.replace(/]/g,')');
     
        if (!this.sections[sectionName]) {
            this.sections[sectionName] = {};
        }
        return this.sections[sectionName]
    }
     
    /**
     * 将INI转换成文本
     *
     * @returns {string}
     */
    INI.prototype.encodeToIni = INI.prototype.toString = function encodeIni() {
        var _INI = this;
        var sectionOut = _INI.encodeSection(null, _INI);
        Object.keys(_INI.sections).forEach(function (k, _, __) {
            if (_INI.sections) {
                sectionOut += _INI.encodeSection(k, _INI.sections[k])
            }
        });
        return sectionOut;
    }
     
    /**
     *
     * @param section
     * @param obj
     * @returns {string}
     */
    INI.prototype.encodeSection = function (section, obj) {
        var out = "";
        Object.keys(obj).forEach(function (k, _, __) {
            var val = obj[k]
            if (val && Array.isArray(val)) {
                val.forEach(function (item) {
                    out += safe(k + "[]") + " = " + safe(item) + "
    "
                })
            } else if (val && typeof val === "object") {
            } else {
                out += safe(k) + " = " + safe(val) + eol
            }
        })
        if (section && out.length) {
            out = "[" + safe(section) + "]" + eol + out
        }
        return out+"
    ";
    }
    function safe(val) {
        return (typeof val !== "string" || val.match(/[
    ]/) || val.match(/^[/) || (val.length > 1 && val.charAt(0) === """ && val.slice(-1) === """) || val !== val.trim()) ? JSON.stringify(val) : val.replace(/;/g, '\;')
    }
     
    var regex = {
        section: /^s*[s*([^]]*)s*]s*$/,
        param: /^s*([w.-\_]+)s*=s*(.*?)s*$/,
        comment: /^s*;.*$/
    };
     
    /**
     *
     * @param data
     * @returns {INI}
     */
    exports.parse = function (data) {
        var value = new INI();
        var lines = data.split(/
    |
    |
    /);
        var section = null;
        lines.forEach(function (line) {
            if (regex.comment.test(line)) {
                return;
            } else if (regex.param.test(line)) {
                var match = line.match(regex.param);
                if (section) {
                    section[match[1]] = match[2];
                } else {
                    value[match[1]] = match[2];
                }
            } else if (regex.section.test(line)) {
                var match = line.match(regex.section);
                section = value.getOrCreateSection(match[1])
            } else if (line.length == 0 && section) {
                section = null;
            }
            ;
        });
        return value;
    }
     
    /**
     * 创建INI
     * @type {Function}
     */
    exports.createINI = exports.create = function () {
        return new INI();
    };
     
    var fs = require('fs');
     
    exports.loadFileSync =function(fileName/*,charset*/){
        return exports.parse(fs.readFileSync(fileName, "utf-8")) ;
    }
    

      

    conf.ini:

    [user]
    username=test
    password=123456
    

     实际调用实例:

    var INI = require("../ini/INI");//INI模块
    var ini___ = INI.loadFileSync("conf.ini")//从conf.ini读取配置
    var se = ini___.getOrCreateSection("user");//取得httpserver
    var username = se['username'];
    var password= se['password'];
    

      

  • 相关阅读:
    geoserver 文件系统
    geoserver 源码介绍
    geoserver 开发2
    geoserver 开发1
    geoserver笔记
    linux 下安装gult
    LINUX 笔记5
    SQLSTATE[HY000] [2002] 乱码
    微信开发
    javascript记忆
  • 原文地址:https://www.cnblogs.com/saryli/p/8352015.html
Copyright © 2020-2023  润新知