【发布时间】:2017-10-09 07:14:33
【问题描述】:
创建身份验证系统。当用户进行post-查询(router.js)时:
var user = require("../controllers/user");
router.post("/login", function(req, res, next){
user.login(req, function(result) {
res.send(result);
});
文件控制器/user.js:
var mongo = require("./mongo");
exports.login = function (req, callback) {
var res;
var login = req.body.login,
password = req.body.password;
var user = new mongo.User({
login: login,
password: password
});
//check if exist user
user.findOne({
login: login
}, function (err, obj) {
if (err) {
console.log("user not found -> save");
user.save(function (err) {
if (err) {
console.log(err);
} else {
callback("OK");
}
});
} else {
console.log("ELSE");
if (password == obj["password"]) {
callback("OK");
}
}
});
}
我希望 user.login 何时完成创建/创建新用户 -> 调用回调并返回结果。
exports.login = function(req, callback){
user.findOne(/...login or sign up new user.../);
callback("Success");
}
所以如果用户授权 ->
user.login(req, function(result) {
res.send(result); //this executes
});
这个怎么做?
【问题讨论】:
-
您也需要添加回调以防出错。所以,让回调接受两个参数(错误,响应)。如果有错误,请致电
callback("error msg", null),如果成功则致电callback(null, "OK")。否则代码看起来不错。回调有问题吗? -
解决回调地狱的典型方法是开始使用 Promise。会不会有问题?
-
@PhagunBaya 感谢您的回复。我也添加了
callback(error, result)来处理错误。代码不起作用:) 客户端上的 XmlHttpRequest 说500: Internal Server Error。所有工作,除了user.findOne函数,因为它不调用回调。我认为语法有问题... -
@Tomalak,我只是不明白为什么需要承诺。知道它们类似于 XmlHttpRequest...是吗?
-
您是否使用任何 npm 库进行 mongo 交互?如果是的话,你能指点给我吗?我想看看user.findOne函数的实现。
标签: javascript node.js mongodb asynchronous mongoose