2017-03-07 2 views
0

Ich versuche, Fehler mit findOne in Meteor-Mongo zu behandeln.Meteor-Mongo: Fehlerbehandlung für findone

Von this stackoverflow question scheint es, dass ich in der Lage sein sollte, Fehler zu behandeln durch collection.findOne({query}, function(err, result){ <handleError> } tun, aber so ergibt sich eine Fehlernachricht zu tun:

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

Der folgende Code funktioniert:

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

Die folgende Code nicht:

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); 

Was bin ich doi falsch und wie soll ich diesen Fehler beheben? Ist das ein meteorspezifischer Fehler?

Jede Hilfe wird sehr geschätzt!

+0

Dieser Übereinstimmungsfehler sieht aus wie etwas, das vom Übereinstimmungspaket auf dem Server generiert wird. Sie sehen diesen Fehler in der Browserkonsole oder Serverkonsole? – zim

+0

Hallo @ zim, danke für die Antwort. Dieser Fehler wird in der Browserkonsole generiert –

Antwort

1

Welche Art von Fehler versuchen Sie gerade mit Ihrem Rückruf zu umgehen?

Meteor's findOne unterscheidet sich von mongodb des Knotens findOne des Knotens, den der Pfosten, den Sie verbinden, benutzt.

Die erwartete Signatur ist:

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

Es gibt keinen Rückruf beteiligt, da das Verfahren synchron läuft (jedoch reaktiv ist).

Wenn Sie einen Standardwert zurückgeben mögen, wenn das Dokument nicht gefunden wird, können Sie einfach ein JS logische verwenden OR:

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

Ein strengerer Ansatz wäre, seine Art zu vergleichen mit

typeof queryResult === 'undefined' 

Beachten Sie, dass, wenn theData Sammlung durch das obige Abonnement Meteor.subscribe('thePubSub') zugeführt wird, bezweifle ich Meteor Zeit haben, wird die Sammlung auf dem Client durch die Zeit, die Sie abfragen, um zu bevölkern ...

+0

Ich versuche, Fehler zu behandeln, wenn die ID nicht gefunden werden kann. Wie soll ich das machen, wenn ich unterscheiden möchte, ob das Dokument "nicht definiert" ist oder ob das Dokument nicht abgefragt wurde? –

+0

Was meinst du mit "wurde nicht gefragt"? – ghybs

+0

Bedeutet, wenn ich die Komponente lade und die Funktion 'createContainer' starte, ist mein Dokument' x' noch nicht fertig, aber wird bald sein, wenn die ID, nach der abgefragt wird, gültig ist. Wenn jedoch die ID, für die abgefragt wird, nicht gültig ist, wird "x" undefiniert. Wie kann das System wissen, ob das Dokument aufgrund der anfänglichen Verzögerungszeit oder nach einer fehlgeschlagenen Abfrage nicht definiert ist? –