NodeJS - 导出多个功能

时间:2015-05-12 10:10:35

标签: javascript node.js

我正在尝试构建我的第一个NodeJS模块。 这就是我在做的事情:

var text = function(){
    this.padRight = function(width, string, padding){
        return (width <= string.length) ? string : this.padRight(width, string + padding, padding);
    };
    this.cleanText = function(text){
        if (typeof text !== 'undefined') {
            return text.replace(/(\r\n|\n|\r)/gm,"");
        }
        return null;
    };
    this.printOut = function(outputObj){
        var module = this,
            output = "";

        outputObj.forEach(function(obj){
            switch(obj.type){
                case "date" :
                    var date = obj.contents;
                    if(typeof date != "undefined") output += date.toString().substring(4, 25) + "\t";
                    break;
                case "string":
                    var string = obj.contents;
                    if(typeof string != "undefined"){
                        string = module.cleanText(string);
                        if(typeof obj.substring != "undefined" && obj.substring != 0) {
                            string = string.substring(0, obj.substring);
                        }
                        if(typeof obj.padRight != "undefined" && obj.padRight != 0) {
                            string = module.padRight(15, string, " ");
                        }
                        output += string + "\t";
                    }
                    break;
            }
        });
        console.log(output);
    };
};

module.exports.text = text;

我正在尝试使用不同类型的助手,所以我希望能够像这样调用这个模块:

require("helpers");    
helpers.text.printOut();

但我收到了错误。

如何在同一模块中导出不同的功能并单独调用它们?

由于

2 个答案:

答案 0 :(得分:1)

问题是text本身就是一个函数,我觉得你想要导出text实例而不是函数本身,即

module.exports.text = new text();

答案 1 :(得分:1)

您的代码有点令人困惑,因为您正在定义一个构造函数,您正在导出(正如James所标识的那样)。这很令人困惑,因为JS习惯于用大写编写构造函数。

我建议使用与James&#39;不同的解决方案,即不导出新的Text(),而是导出构造函数本身。 在需要此对象的模块中,将此模块导入为var Text = require('./text');并执行新的Text()部分。导出新的Text()有一个缺点,就是你有效地创建了一个单例,这可能是也可能不是你的意图。 请记住,模块上的require()实际上只执行一次,当不同的模块加载上述模块时,它们是相同的对象。