从中间件返回bool值到表达控制器

时间:2014-02-04 09:20:10

标签: angularjs express

我想从定义为的中间件返回一个布尔值

module.exports = {
   authenticatepracticename: function(pname) {  
       ecollection.find({ $and: [{'name':pname},{'status' : 'active'}] }).exec(function (err, result) {
           if (err) return false;
           if(result.length == 1){
               // console.log('true');
               return true;
            }
            else{
                // console.log('false');
                return false;
            }
       });  
   },
   // ... 
}

我的快递控制器定义为

exports.checkcredentails = function (req, res) {  
    var result = practice.authenticatepracticename(practiceName);
}

但即使中间件函数被调用,结果也会出现undefined

1 个答案:

答案 0 :(得分:0)

您从undefined获得practice.authenticatepracticename结果的原因是ecollection.find执行异步操作而authenticatepracticename结束而不返回任何值(undefined在JavaScript中。)

为了改善这一点,您需要提供从checkcredentailsauthenticatepracticename的回调函数。

示例:

exports.checkcredentails = function (req, res) {  
    practice.authenticatepracticename(practiceName, function(err, result){
        // you can handle error and result here e.g. by sending them back to a customer
        res.send("Result: " + result);
    });
}

你的authenticatepracticename

authenticatepracticename: function(pname, cb) {
    ecollection.find({ $and: [{'name':pname},{'status' : 'active'}] }).exec(function (err, result) {
        if (err) return cb(err)
        if(result.length == 1){
            // console.log('true');
            cb(null, true)
        }
        else {
            // console.log('false');
            cb(null, false)
        }
    });  
}

我希望这会有所帮助。