我是业余nodejs开发人员。我在使用javascript模块时遇到了很多问题,并且需要来自其他模块的模块。这是我需要帮助的场景。
假设我在一个文件中有API定义,如(userApi):
var userFunctions = require('./userFunctions.js')()
module.exports = function(){
module.getUser = function(req.res){
userFunctions.getUser(req.id, function(err,user){
if(err) return res(err)
return res(null,user)
})
}
return module;
}
辅助模块,如(userFunctions.js)
var paymentFunctions = require('../payment/paymentFunctions.js')()
module.exports = function(){
module.getUser = function(id,res){
//logic
}
return module;
}
另一个辅助模块,如(paymentFunctions.js)
var userFunctions = require('../user/userFunctions.js')()
module.exports = function(){
module.makePayment = function(req,res){
userFunctions.getUser(req.id, function(err){
if(err) return res(err)
return res(null)
})
}
return module;
}
正如您所看到的,我的所有助手和API都在模块内部。我还在require语句的末尾添加括号。您可能还注意到paymentFunctions需要userFunctions,反之亦然。在我使用节点期间,我还没有弄清楚这种模式带来的各种错误。今天我看到"要求不是功能错误"。注意:当我为webstorm项目编制索引时,它正在工作并突然停止工作。话虽如此,我在过去使用require语句和JS模块时遇到了许多类似的错误。因此,我需要在大脑中解决这个问题。
答案 0 :(得分:0)
嗯,我认为秘诀是了解module.exports的工作原理。首先,您需要创建一个“可导出”对象,然后设置其属性和方法。
类似的东西:
var userFunctions = require('./userFunctions.js');
//Lets say this is your userApi class
module.exports = function () {
this.getUser = function (req, res) {
userFunctions.getUser(req.id, function (err, user) {
if (err) return res(err)
return res(null, user)
});
}
};
在这种情况下,我创建了一个对象(实际上是“Javascript类”)并将其导出为AS模块。然后,我可以在其他代码位置要求它和它的方法,因为这个属性是在可导出对象上设置的(this.prop = ...)。