【问题标题】:NodeJs - calling one method from another in server controllerNodeJs - 在服务器控制器中从另一个方法调用一个方法
【发布时间】:2015-03-30 20:53:05
【问题描述】:

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

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

this.login(newUser) 行不起作用,普通旧 login(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
            })
        }
    )
})
}

【问题讨论】:

  • 我倾向于在导出之外定义函数,然后在导出中和其他函数中都可以引用它。

标签: node.js express


【解决方案1】:

控制器应该尽可能少做,并且应该协调执行存储在其他地方的函数所需的工作。

查看此要点 - click here

我所做的是创建了与客户端请求无关的“服务”,因此可以在任何地方重复使用。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    感谢戴夫·牛顿

    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)
             })
         }
     ) }) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多