使用以下控制器,如何在同一控制器中从另一个方法调用一个方法?
具体来说,在成功注册()中调用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 :(得分: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)
})
}
) }) }