2015-03-30 2 views
0

С помощью следующего контроллера, как я могу вызвать один метод из другого в том же контроллере?NodeJs - вызов одного метода из другого в контроллере сервера

В частности, вызов 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 
      }) 
     } 
    ) 
}) 
} 
+0

Я обычно определяю функцию вне экспорта, тогда на нее можно ссылаться как на экспорт, так и на другие функции. –

ответ

0

Благодаря Дейву Ньютону

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

Не работает –

1

контроллеры должны делать как можно меньше, и должны организовать работу, необходимую выполнения функций, хранимых в другом месте.

Посмотреть это сутью - click here

То, что я сделал создается «услуги», которые не привязаны к запросу клиента, поэтому повторно использоваться везде.

Надеюсь, это поможет.

Смежные вопросы