我正在尝试构建我的第一个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();
但我收到了错误。
如何在同一模块中导出不同的功能并单独调用它们?
由于
答案 0 :(得分:1)
问题是text
本身就是一个函数,我觉得你想要导出text
的实例而不是函数本身,即
module.exports.text = new text();
答案 1 :(得分:1)
您的代码有点令人困惑,因为您正在定义一个构造函数,您正在导出(正如James所标识的那样)。这很令人困惑,因为JS习惯于用大写编写构造函数。
我建议使用与James&#39;不同的解决方案,即不导出新的Text(),而是导出构造函数本身。
在需要此对象的模块中,将此模块导入为var Text = require('./text');
并执行新的Text()部分。导出新的Text()有一个缺点,就是你有效地创建了一个单例,这可能是也可能不是你的意图。
请记住,模块上的require()实际上只执行一次,当不同的模块加载上述模块时,它们是相同的对象。