【问题标题】:How to call an exported function internally in nodejs?如何在nodejs内部调用导出的函数?
【发布时间】:2018-11-26 00:07:27
【问题描述】:

我正在尝试调用 nodejs 模块中的导出函数。

exports.sayHello = function (msg) {
 console.log(msg) 
}

function run(msg) {
  this.sayHello(msg);
}

run("hello");

当我运行这个脚本时,我得到 TypeError: this.sayHello is not a function

【问题讨论】:

  • 我很好奇为什么在给exports.sayHello分配一个函数后,你没有想到通过exports.sayHello()调用它?那是您分配功能的地方,您可以在那里访问它。

标签: javascript node.js module export


【解决方案1】:

只需将其与导出分开声明(调用时不要使用this,您还没有将其附加到对象上):

function sayHello(msg) {
 console.log(msg) 
}
exports.sayHello = sayHello;

function run(msg) {
  sayHello(msg);
}

run("hello");

也就是说,您可以通过exports调用它:

exports.sayHello = function (msg) {
 console.log(msg) 
}

function run(msg) {
  exports.sayHello(msg); // <===
}

run("hello");

...但这对我来说似乎有点迂回,尽管我被告知它可以帮助测试,例如in this example

【讨论】:

  • 这不是一个环形交叉路口,如果它有目的的话,例如。提高可测试性。
  • 如果模块导出始终被称为exports 方法,则可以监视或模拟它们。这提高了在stackoverflow.com/questions/50854440/… 这样的情况下的可测试性。当然,这不适用于这个特定的 run 函数。
  • @estus - 我想你可能比我有更多的经验。我已更新该评论,谢谢!
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
相关资源
最近更新 更多