module.exports with object

时间:2014-07-07 17:06:05

标签: javascript node.js module routes export

我从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等方法......

非常感谢任何帮助。

1 个答案:

答案 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提供的默认空对象。