Javascript node.js和mongoose中回调的返回值
我尝试了以下代码Javascript node.js和mongoose中回调的返回值,javascript,node.js,mongodb,asynchronous,mongoose,Javascript,Node.js,Mongodb,Asynchronous,Mongoose,我尝试了以下代码 function authenticate( accesskey ) { var res = someModel.findOne( {'uid': accesskey}, function ( err , user) { if(err){ console.error("Can't Find.!! Error"); } if(user===null){
function authenticate( accesskey ) {
var res = someModel.findOne( {'uid': accesskey}, function ( err , user) {
if(err){
console.error("Can't Find.!! Error");
}
if(user===null){
return false;
}
else{
console.log(user);
return true;
}
});
console.log(res);
return res;
}
function authenticate( req, result, accesskey, callback ) {
var auth = null;
someModel.findOne( {'uid': accesskey}, function ( err , user) {
console.log("try authenticate");
if(err){
console.error(err);
}
if(user===null)
auth = false;
else
auth = true;
callback(auth);
});
}
但是res
这里返回一个mongoose数据类型
我希望像这样调用身份验证函数-
if(authenticate(req.params.accesskey)){
//do something
}
else{
//do something else
}
routeHandler( req, reply ) {
authenticate( req, reply, req.params.accesskey , function (auth) {
if(auth) {
//"primary code"
}
else {
//fallback
}
});
}
在实施Mustafa Genç的解决方案后更新
在熟悉回调之后,我最终得到了以下代码
function authenticate( accesskey ) {
var res = someModel.findOne( {'uid': accesskey}, function ( err , user) {
if(err){
console.error("Can't Find.!! Error");
}
if(user===null){
return false;
}
else{
console.log(user);
return true;
}
});
console.log(res);
return res;
}
function authenticate( req, result, accesskey, callback ) {
var auth = null;
someModel.findOne( {'uid': accesskey}, function ( err , user) {
console.log("try authenticate");
if(err){
console.error(err);
}
if(user===null)
auth = false;
else
auth = true;
callback(auth);
});
}
我是这样用的-
if(authenticate(req.params.accesskey)){
//do something
}
else{
//do something else
}
routeHandler( req, reply ) {
authenticate( req, reply, req.params.accesskey , function (auth) {
if(auth) {
//"primary code"
}
else {
//fallback
}
});
}
您需要回调函数,因为这是一个异步请求:
function authenticate(accesskey, callback) {
var auth = null;
userModel.findOne({'uid': accesskey}, function(err, user) {
console.log("TRY AUTHENTICATE");
if (err) {
console.error("Can't Find.!! Error");
}
//None Found
if (user === null) {
console.error("ACCESS ERROR : %s Doesn't Exist", accesskey);
auth = false;
} else {
console.log(user);
auth = true;
}
callback(auth);
});
}
并调用此函数,如下所示:
authenticate("key", function (authResult) {
//do whatever
});
你也可以尝试承诺
function authenticate( accesskey ) {
var promise = someModel.findOne({'uid': accesskey}).exec();
}
routeHandler( req, reply ) {
authenticate(req.params.accesskey)
.then(function (auth) {
if(auth) {
//"primary code"
}
else {
//fallback
}
})
.catch(console.error);
}