NodeJS 的多个 module.exports
Posted
技术标签:
【中文标题】NodeJS 的多个 module.exports【英文标题】:Multiple module.exports for NodeJS 【发布时间】:2019-01-02 09:05:57 【问题描述】:我试图在我的 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');
【问题讨论】:
【参考方案1】:你似乎在寻找
let one = '';
module.exports = function(msg)
console.log(data+'::'+msg);
;
module.exports.one = function(data)
one = data;
;
注意exports
变量只是module.exports
对象的别名,当用你的函数覆盖它时,你丢弃了它的内容。您需要将 one
方法放在您的 main 函数中。
【讨论】:
好主意!但是有一个小问题。我说过,在运行myModule('bro');
时使用保存在myModule.one('hi');
的配置,其中myModule('bro');
是在模块中首先定义的。
注意 const one = data 的行。我打算在实际上位于 module.exports.one 函数上方的 module.exports 函数中使用它。
当我尝试 module.exports = function(msg) console.log(one+'::'+msg); ; module.exports.one = function(data) const one = data; ;
时,控制台会显示一条错误日志,提示 ReferenceError: one is not defined
@NodeDev 何时定义函数并不重要,重要的是何时调用它们。只要在定义了所有它们之后才调用它们,那么从另一个调用它们是没有问题的。
@NodeDev 当然它没有被定义——const one
是一个 local 变量。如果你想从两个函数中访问它,你可能想把它放在模块级别的范围内,尽管你需要使用let
而不是const
。【参考方案2】:
当您执行以下操作时:
module.exports.one = function(data)
const one = data;
;
module.exports = function(msg)
console.log(data+'::'+msg);
;
您首先将属性 one 分配给模块对象 (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
【讨论】:
是的,但第一个功能是为应用程序/模块分配一些配置。然后使用 myModule('bro'); myModule('亲爱的'); myModule('老兄');我想运行 main 函数,这取决于 myModule.one(config); 分配的配置;以上是关于NodeJS 的多个 module.exports的主要内容,如果未能解决你的问题,请参考以下文章
nodeJS exports – exports vs module.exports
NodeJS / Express 中的“module.exports”和“exports.methods”是啥意思?
nodejs中exports与module.exports的区别
nodejs中exports与module.exports的区别