我写了一个添加用户的函数:
exports.add = function(req, res) {
UserRoles.create(req.body, function (err, musician) {
if (err) return console.log(err);
});
}
我理解它应该从客户端/ UI调用,因为它需要请求和响应。
然而,现在,需要能够在内部调用它。也就是说,当用户注册自己时,最终用户只需要添加到数据库中,所以我认为我应该在注册码中调用此函数以避免重写代码。
看起来像这样:
register: function(req, res, next) {
try {
User.validate(req.body);
}
catch(err) {
return res.send(400, err.message);
}
User.add(/*what do I pass in here */ function(err, user) { --POINT OF PROBLEM
if(err === 'UserAlreadyExists') return res.send(403, "User already exists");
else if(err) return res.send(500);
req.logIn(user, function(err) {
if(err) { next(err); }
else { res.json(200, { "role": user.role, "username": user.username }); }
});
});
}
如何避免在此处重写代码以进行添加?有没有办法可以在register
内调用它?如果没有,我可以得到一些关于这样做的指示吗?我是一个完整的新手,对此知之甚少,所以我会请求建议方法的解释,以便我理解一种方法的优点和缺点。
答案 0 :(得分:1)
我建议只需传入数据对象即可将User.add()
与req/res
分离:
exports.add = function(user, callback) {
UserRoles.create(user, callback);
// This is short for:
// UserRoles.create(user, function(err, musician) {
// if (err) return callback(err);
// return callback(null, musician);
// });
};
你会这样称呼它:
User.add(req.body, function(err, user) {
...
});