[英]Getting promise error in node js
Server js: 服务器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;
});
};
I am doing an async task (db call) in my user_controller.login and it returns a boolean "value" 我在user_controller.login中执行异步任务(db调用),并且返回布尔“值”
But when I execute this I am getting error:Cannot read property 'then' of undefined 但是当我执行此操作时,我收到错误消息:无法读取未定义的属性“ then”
I saw previous questions on this error but couldnt understand it 我看到了有关此错误的先前问题,但无法理解
I think you can try with callback function. 我认为您可以尝试使用回调函数。 The login function takes one callback param and execute that function at end.
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);
});
};
While calling the function login pass the third param as a callback function. 调用函数登录时,将第三个参数作为回调函数传递。
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);
}
})
}));
Note: I am not tested the above code. 注意:我没有测试上面的代码。
You can create promise based functions in Nodejs using Q library. 您可以使用Q库在Node.js中创建基于Promise的函数。
npm install q
Below code can help you. 以下代码可以为您提供帮助。
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;
});
and use it in Server.js 并在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
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.