多个 module.exports 用于 NodeJS

Multiple module.exports for NodeJS

我试图在我的 NodeJS 模块中添加两个 module.exports。我为我的模块尝试了以下代码:

exports.one = function(data){
    const one = data;
};
module.exports = function(msg) {
    console.log(one+'::'+msg);
};

下面 index.js 的代码:

var myModule = require('./mymodule.js');


myModule.one('hi');
myModule('bro');
myModule('Dear');
myModule('Dude');

我预计它会将以下数据记录到控制台中:

hi bro
hi Dear
hi Dude

但是控制台显示:

TypeError: myModule.one is not a function
    at Object.<anonymous> (....

请问我该如何解决这个问题?有 Stack Overflow 问题询问如何在 NodeJS 模块中使用多个 module.exports。但答案如下所示:

exports.one = function (){};
exports.two = function (){};

但是如果我使用那个代码,我必须使用

myModule.one('hi');
myModule.two('bro');
myModule.two('Dear');
myModule.two('Dude');

而不是:

myModule.one('hi');
myModule('bro');
myModule('Dear');
myModule('Dude');

当您执行以下操作时:

module.exports.one = function(data){
    const one = data;
};
module.exports = function(msg) {
    console.log(data+'::'+msg);
};

您首先将 属性 分配给模块对象 (exports.one=...)。然后你用第二行重新评估整个 module.exports 对象,从而擦除你分配给它的第一个函数。

你可以这样解决:

module.exports.one = function(data){
    const one = data;
};
module.exports.two = function(msg) {
    console.log(data+'::'+msg);
};

然后您可以像这样调用其他模块中的函数:

var myModule = require('./mymodule.js');
myModule.one(arg1) // calls first function
myModule.two(arg2) // calls second function

您似乎在寻找

let one = '';
module.exports = function(msg) {
    console.log(data+'::'+msg);
};
module.exports.one = function(data){
    one = data;
};

请注意,exports 变量只是 module.exports 对象的别名,当用您的函数覆盖它时,您丢弃了它的内容。您需要将 one 方法放在主函数上。