2013-01-07 62 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(); 
    } 

問題解決了。