NodeJS的多个module.exports

时间:2018-07-25 13:54:04

标签: javascript node.js module node-modules

我试图在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> (....

请问我该如何解决这个问题?还有一些堆栈溢出问题,询问如何在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');

3 个答案:

答案 0 :(得分:4)

您似乎正在寻找

https://s3-eu-west-1.amazonaws.com/support-zendesk/Config/tag_form_map.json

请注意,let one = ''; module.exports = function(msg) { console.log(data+'::'+msg); }; module.exports.one = function(data){ one = data; }; 变量只是exports对象的别名,在用函数覆盖该变量时,您将其内容丢弃了。您将需要在主函数上放置module.exports方法。

答案 1 :(得分:1)

您需要将您的对象创建为module.exports的子代。

为什么不使用module.exports.one以及module.exports.two等?

编辑:对不起。我错了。贝尔吉是对的。不知道为什么我要投票。 :P

答案 2 :(得分:0)

执行以下操作时:

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