我从node.js和javascript服务器端开始。我想,也许我对module.exports事情感到困惑。而且我很确定这是一个菜鸟问题。
我正在尝试做一个简单的任务:
oAuth - controler [oAuth.js]
module.exports = function() {
return {
tryLogin :function(Username,Password){
}
};
}
oAuth - dispatcher [route.js]
module.exports = function(app){
app.post('/api/oAuth/login', function(req, res){
console.log("Trying to log with :");
console.log(req.body.Username);
console.log(req.body.Password);
var oAuthCtrl = require('./oAuth.js');
var result = oAuthCtrl.tryLogin(req.body.Username,req.body.Password);
res.send(result);
});
}
控制台结果是:
TypeError: Object function (width) {
return {
tryLogin :function(Username,Password){
}
};
} has no method 'tryLogin'
我想要的是oAuthCtrl变量中的oAuth对象。通过这种方式,我可以调用我的tryLogin方法。
这里的终点是使用passeport.js构建一个oAuth模块,其中包含一些块和页面视图以及register,tryLogin,logout等方法......
非常感谢任何帮助。
答案 0 :(得分:1)
导出时,您无需在匿名函数中包装tryLogin
。
简单地说,module.exports
是一个对象。您几乎可以将其视为在脚本上调用require
的一种“返回值”。
你只想要
// oauth.js
function tryLogin {
// ...
}
module.exports.tryLogin = tryLogin;
以下是基于您的评论的替代方案
// oauth.js
function MyClass() {
}
MyClass.tryLogin = function tryLogin() {
// ...
};
module.exports = MyClass;
在最后一行中,我们实际上用我们的“类”替换 module.exports
提供的默认空对象。