Javascript 如何从节点中的module.exports链调用函数

Javascript 如何从节点中的module.exports链调用函数,javascript,node.js,express,Javascript,Node.js,Express,我在我的一个模型(review)中声明了一个函数,并以标准节点方式导出它,以便其他文件可以使用它。然后我引用另一个模型(公司)并将其导出到那里 最后,我试图在另一个文件(companysweet)中使用company中定义的函数,但得到的是company.getAllCompanyswithReviews不是一个函数错误 我想做的事可能吗 // review.js module.exports.getAllCompaniesWithReviews = function(next) { //

我在我的一个模型(
review
)中声明了一个函数,并以标准节点方式导出它,以便其他文件可以使用它。然后我引用另一个模型(
公司
)并将其导出到那里

最后,我试图在另一个文件(
companysweet
)中使用
company
中定义的函数,但得到的是
company.getAllCompanyswithReviews不是一个函数
错误

我想做的事可能吗

// review.js
module.exports.getAllCompaniesWithReviews = function(next) {
  // ...
  // ...
  // ...
};

// company.js
var reviews = require('./review');
module.exports.getAllCompaniesWithReviews = reviews.getAllCompaniesWithReviews;

// companiesRoute.js
var company = require('../models/company');
company.getAllCompaniesWithReviews(function(err, result) {
  // ...
  // ...
  // ...
});
如果我尝试直接从
companiesRoute
调用该函数,则它可以工作:

review.getAllCompaniesWithReviews(function(err, result) {
  // ...
  // ...
  // ...
});
当然,这就是答案。但为什么我的版本不起作用


另外,节点v4.4.4。

您可以在company.js中尝试一下吗

module.exports.getAllCompaniesWithReviews = function(next) { 
     reviews.getAllCompaniesWithReviews(next);
}

您只能在外部看到您导出的内容。发布整个文件,您将得到解决方案。只需执行
exports.getAllCompanyWithReviews=…
添加新的导出属性。仅在替换整个导出对象时才使用
module.exports
。@MattHarrison
exports
只是
module.exports的别名,没有任何区别。不过还是要谢谢你。它一开始是对同一个对象的引用,但你可以改变它。了解差异很重要:
exports.something='hello';module.exports={something:'world'};console.log(exports.something);//记录“你好”而不是“世界”
Nice one。这非常有效。您在哪个版本的节点上尝试了此操作?他们必须更改v5中的某些内容,因为它在v5和v6中运行良好。我的版本是v4.4.2。我也需要升级它。谢谢你通知我。