JavaScript 中的 Module.exports

问题描述

module.exports = testMethod ;module.exports = { testMethod } ; 之间有什么不同 因为当我使用 module.exports = testMethod ; 时,它会抛出如下错误错误:Route.get() 需要一个回调函数,但得到了一个 [object Undefined] 但我对module.exports = { testMethod } ;

没问题

整个代码

const testMethod = asyncErrorWrapper(async (req,res,next) => {
  const information = req.body;

  const question = await Question.create({
    title: information.title,content: information.content,user: req.user.id,});

  res.status(200).json({
    success: true,data: question,});
});

module.exports = { testMethod };

解决方法

在 VSCode 中,在 ES5 或 ES6 版本之间切换到 Js 可能会让你走上糟糕的道路。 所以,小心点,我最近遇到了同样的问题,在 ES6 module.exports = router 上使用重构到一些 Js 文件的末尾(使用 express 的 Node 项目)后,它就完成了。

对我来说很奇怪,在 Aws 上的 Cloud9 上我没有问题。

,

两者都用于将您的模块导出到外部函数。但是当您使用带有

的任何回调函数时
module.exports = somectrl

然后它会失败但是

module.exports = { somectrl }

因为当您创建一个对象时,它实际上会实例化它,但是当您传递一个 ref 函数/ const 函数名称时,它将表现为一个无法正常工作的现有函数。

你可以做这样的事情来工作,

module.exports = somectrl()

module.exports = new somectrl()