JS的新手,所以我希望我的bug很容易修复。
所以我在users.js
文件中找到了一个函数:
exports.authenticate = function(user){
User.findOne({
'username':user.username,
'password':user.password,
},'username', function (err, dbuser) {
if (err) return handleError(err);
console.log(Boolean(dbuser));
return Boolean(dbuser);
});
}
所以我将我的dbuser的值作为布尔值返回:如果存在则返回true,否则返回false。很简单没有?但是有陷阱......
var userClass = require('./users.js');
var myUser = userClass.create('xxazeddax','azezaeazeazeaz','mazeazeazezaeaze');
var authent = userClass.authenticate(myUser);
console.log(authent);
这里我期待一个布尔值,因为它是authenticate()唯一可以返回的东西..但是,我没有定义。 拜托,我哪里错了?
答案 0 :(得分:3)
您的function(user)
又名authenticate
不会返回任何其他函数function (err, dbuser)
是回调函数,这意味着它将在请求完成时执行,但是,因为它是回调功能这意味着function(err, dbuser)
并不意味着按顺序执行。
我建议您阅读本文以了解正在发生的事情
http://www.impressivewebs.com/callback-functions-javascript/
我通过这种方式快速查看改变代码的方法:
function(user){
User.findOne({'username':user.username,'password':user.password},'username',
function (err, dbuser) {
if (err) return handleError(err);
console.log(Boolean(dbuser));
return Boolean(dbuser);
});
return true; //<-- authenticate will always return true
}