NodeJs - 在服务器控制器中从另一个方法调用一个方法

时间:2015-03-30 20:53:06

标签: node.js express

使用以下控制器,如何在同一控制器中从另一个方法调用一个方法?

具体来说,在成功注册()中调用login(),同时在表单使用login()时保留相同的功能吗?

this.login(newUser)行不起作用,也不是普通旧登录(newUser)

在这两种情况下,我都会收到错误:

 TypeError: Cannot call method 'login' of undefined

var mongoskin = require('mongoskin');

module.exports = {
login: (function (req, res) {
    req.db.collection('auth').findOne({_id: mongoskin.helper.toObjectID(req.body.id)},
        function (err, results) {
            // log person in and send results to client
        }
    )
}),

signup: (function (req, res) {
    var user = req.body;
    req.db.collection('auth').insert(user, function (err, newUser) {
            // after adding user, automatically log them in

            // does not work:
            //login(newUser, function (err) {
               // do something
            //})

            // does not work:
            this.login(newUser, function (err) {
               // do something
            })
        }
    )
})
}

2 个答案:

答案 0 :(得分:1)

控制器应该尽可能少地执行,并且应该通过执行存储在别处的函数来协调所需的工作。

查看此要点 - click here

我所做的是创造了"服务"与客户请求无关,因此无处不在。

希望这有帮助。

答案 1 :(得分:0)

感谢Dave Newton

var mongoskin = require('mongoskin');
var myCollection = 'auth';

<强>解决方案

function localLogin(db, myCollection, user, res){
    db.collection(myCollection).findOne({_id: mongoskin.helper.toObjectID(user._id)}, 
    function(err, user){
        res.send({ token: createToken(user) });
});

 module.exports = { 
    login: (function (req, res) {
     var user = req.body;
     localLogin(req.db, myCollection, user, res)
   }, 
    signup: (function (req, res) {
       var user = req.body;
         req.db.collection(myCollection).insert(user, function (err, newUser) {
          // after adding user, automatically log them in
          localLogin(req.db, myCollection, newUser, res)
         })
     }
 ) }) }
相关问题