2017-03-07 58 views
0

我想在流星蒙戈中使用findOne來處理錯誤。Meteor-Mongo:錯誤處理findone

this stackoverflow question,看來我應該可以做collection.findOne({query}, function(err, result){ <handleError> },但在一個errormessage的這樣做的結果來處理錯誤:

"Match error: Failed Match.OneOf, Match.Maybe or Match.Optional validation"

下面的代碼工作:

export default createContainer((props) => { 
    let theID = props.params.theID; 
    Meteor.subscribe('thePubSub'); 
    return { 
    x: theData.findOne({_id: theID}), 
    }; 
}, App); 

以下代碼沒有:

export default createContainer((props) => { 
    let theID = props.params.theID; 
    Meteor.subscribe('thePubSub'); 
    return { 
    x: theData.findOne({_id: theID}, function(err,result){ 
     if(!result){ 
     return {} 
     }; 
    }), 
    }; 
}, App); 

我是什麼doi恩錯了,我該如何解決這個錯誤?這是一個流星特定的錯誤?

任何幫助,非常感謝!

+0

匹配錯誤看起來像由服務器上的匹配包生成的東西。您在瀏覽器控制檯或服務器控制檯中看到該錯誤? – zim

+0

嗨@zim,謝謝你的回覆。此錯誤在瀏覽器控制檯上生成 –

回答

1

你正準備用你的回調來處理什麼樣的錯誤?

Meteor's findOne與節點的mongodb驅動程序的findOne不同,表示您鏈接的帖子使用。

預期的簽名是:

collection.findOne([selector], [options])

沒有涉及回調,由於該方法同步運行(但是反應性的)。

如果您想返回默認值時,未找到該文件,你可以簡單地用一個JS邏輯OR:

// Provide an alternative value on the right that will be used 
// if the left one is falsy. 
theData.findOne({_id: theID}) || {}; 

更嚴格的方法是用

比較其類型
typeof queryResult === 'undefined' 

注意,如果theData收集通過上述認購Meteor.subscribe('thePubSub')喂,我懷疑流星將有時間在您的查詢的時間來填充客戶端的集合...

+0

我試圖處理錯誤,如果找不到id。如果我想區分文檔是「未定義」還是未查詢文檔,我應該怎麼做? –

+0

你是什麼意思「未被查詢過」? – ghybs

+0

意思是,如果我加載組件並啓動'createContainer'函數,我的文檔'x'還沒有準備好,但是如果被查詢的ID是有效的,很快就會出現。但是,如果被查詢的ID無效,那麼'x'將變成不確定的。系統如何知道文檔是否因最初的滯後時間或者查詢失敗後未定義? –