2013-01-07 16 views
0

我有一个预先保存保存文档时定义的方法,具体如下:猫鼬仍然保存文档时出现错误

Org.pre("save",function(next, done) { 
    var Currency = require('./currency'); 

    var cur = this.get('currency'); 
    console.log("checking currency: " + cur); 

    Currency 
    .findOne({name: cur}) 
    .select('-_id name') 
    .exec(function (err, currency) { 
     if (err) done(err); 
     if (!currency) done(new Error("The currency you selected ('" + currency + "') is not supported. Please select one from /currencies")); 
     next(); 
    }); 
}); 

此方法检查货币收藏,看看货币字段输入支持的。在测试我的API时,我得到了相应的错误(500错误消息:您选择的货币...),但文档仍保存在MongoDB中。我期望在发送错误时不应该保存文档。我在这里错过了什么吗?

回答

1

你还在呼吁在错误的情况下next();,所以尝试重写的部分为:

Currency 
    .findOne({name: cur}) 
    .select('-_id name') 
    .exec(function (err, currency) { 
    if (err) return done(err); 
    if (!currency) return done(new Error("The currency you selected ('" + currency + "') is not supported. Please select one from /currencies")); 
    next(); 
    }); 
+0

呀 - 愚蠢的错误。谢谢! –

0

好像通过不将下一个()括在括号中,流程继续。为了使其正常工作,我改变了exec函数:

if (err) { 
    done(err); 
    } else if (!currency) { 
    done(new Error("The currency you selected ('" + currency + "') is not supported. Please select one from /currencies")); 
    } else { 
    next(); 
    } 

问题解决了。