服务器js:
var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
user_controller.login(username, password).then(function(value) {
if (value) {
console.log(value + "true")
done(null, {
id: username,
name: username
});
} else {
console.log(value + "false");
done(null, null);
}
})
}));
USer contoller:
module.exports.login = function(username, password) {
var status;
var userid = username;
User.findOne({
'username': [userid],
'password': [password]
}, function(err, user) {
if (!user) {
console.log("logged err");
status = false;
} else {
console.log("login in");
status = true;
}
console.log(status);
return status;
});
};
我正在我的user_controller.login中执行异步任务(db调用),它返回一个布尔值"值"
但当我执行此操作时,我收到错误:无法读取属性'然后'未定义的
我之前看到过有关此错误的问题但无法理解
答案 0 :(得分:1)
我认为您可以尝试使用回调函数。 login函数接受一个回调参数并在结束时执行该函数。
module.exports.login = function(username, password, callback) {
var status;
var userid = username;
User.findOne({
'username': [userid],
'password': [password]
}, function(err, user) {
if (!user) {
console.log("logged err");
status = false;
} else {
console.log("login in");
status = true;
}
console.log(status);
callback(status);
});
};
调用函数login时,将第三个param作为回调函数传递。
var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
user_controller.login(username, password, function(value) {
if (value) {
console.log(value + "true")
done(null, {
id: username,
name: username
});
} else {
console.log(value + "false");
done(null, null);
}
})
}));
注意:我没有测试上面的代码。
答案 1 :(得分:0)
您可以使用Q库在Nodejs中创建基于承诺的函数。
npm install q
以下代码可以为您提供帮助。
module.exports.login=function(username,password){
var status;
var userid=username;
User.findOne({'username':[userid], 'password':[password]},function(err,user){
var deferred = Q.defer();
if(err){
deferred.reject(err);
} else{
deferred.resolve(data);
}
return deferred.promise;
});
并在Server.js
中使用它var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
user_controller.login(username, password).then(function(user) {
done(null, {
id: username,
name: username
});
});