代码之家  ›  专栏  ›  技术社区  ›  user4261401

如何在节点模块中公开对象

  •  1
  • user4261401  · 技术社区  · 11 年前

    我有一个模块正在使用解析(一种解析功能),其他模块应该查询这个解析器值。 我的问题是

    1. 我应该如何构建它(设计方面)?
    2. 哪个方法应该初始化解析器(第一个调用它的方法 以获得特定值)

    这是从解析器返回两个对象的示例代码,但我认为这不是正确的方法,因为我可能需要提供其他属性

    是模块解析

     parse = function (data) {
            var ymlObj = ymlParser.parse(data);
            return {
                web: ymlObj.process_types.web,
                con: ymlObj.con    
    
            }
    
    };
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   sharko    11 年前

    如果我理解你的话,你可以用getter和setter创建一个简单的模块。

    (parse.js)

    var ymlObj = {};
    
    function Parse() {}
    
    Parse.prototype.setData = function (data) {
        ymlObj = data;
    }
    
    Parse.prototype.getWeb = function () {
        return ymlObj.process_types.web;
    }
    
    Parse.prototype.getCon = function () {
        return ymlObj.con;
    }
    
    module.exports = new Parse();
    

    (parseUser.js)

    var parse = require('./parse.js');
    
    function ParseUser() { }
    
    ParseUser.prototype.useParse = function () {
        console.log(parse.getCon());
    }
    
    module.exports = new ParseUser();
    

    (app.js)

    var parse = require('./parse.js');
    var parseUser = require('parseUser.js');
    
    parse.setData({ ... });
    parseUser.useParse();
    

    你仍然需要做一些基本的工作,比如处理异常,但希望这能帮助你理解基本的结构。

    初始化的方式取决于何时初始化(fetch?)您的数据以及这些数据来自何处。您可以设置时间戳来指示您的数据有多旧,并决定是否仍然依赖它或获取更新的数据。或者,您可以注册来自用户模块的回调,以在每次获取新数据时处理新数据。

    因此,如何设计模块取决于您。;)