2017-03-27 3 views
1

existiert ich eine graphql Abfrage haben, die ein Meeting Objekt mit Client Objekt bekommt:Graphql - get full Unterobjekt oder null, wenn nicht

type Meeting { 
    address: String! 
    client: Client 
} 
type Client { 
    displayName: String! 
} 

Die displayName erforderlich ist, aber client nicht. Wenn ich die Abfrage als

{ 
    getMeeting(meetingId: "43bbea6ea0c6112b0abcf11d") { 
    address 
    client { 
     displayName 
    } 
    } 
} 

Und dieses Treffen nicht über einen Client, dann bin ich erhalte eine Fehlermeldung:

Error: Cannot return null for non-nullable field Client.displayName. 

Ich will nur, dass, wenn es einen Client, Ich werde alle Einzelheiten erfahren. Und wenn nicht, werde ich client: null bekommen.

Wenn ich die erforderliche vom displayName entfernen, wird es auch funktionieren, wenn der Client null ist, und ich werde

"client": { "displayName": null }

bekommen, wie ich es erwartet habe. Aber ich bin immer noch auf der Suche nach einer Möglichkeit, die erforderlichen auf der displayName zu erzwingen - nur wenn es einen Client gibt.

Gibt es eine Möglichkeit, das in Graphql zu tun?

+0

Wie sieht Ihr Abfrage-Resolver aus? –

+0

Ich habe die Resolver nach Ihrem Kommentar noch einmal überprüft, und es war nicht das Problem, aber es half mir, zu dem wirklichen Problem zu kommen, das wegen mogoose ist, ich habe eine Antwort unten gepostet. Vielen Dank! – yishaiz

Antwort

1

Also das Problem war wegen mongoose.

Wenn ich das Abrufen der Daten aus der DB, ergänzt Mungo das leere eingebettete Subdokument von client: {} auch wenn es in der meeting Dokument in der DB (und console.log(meeting) nicht zeigt dieses Feld kein solcher Schlüssel ist - nur console.log(meeting.client) Drucke client: {}).

Daher graphql versucht, das erforderliche Feld von client zurückzugeben, weil client nicht undefined ist, wie ich dachte.

Verwandte Themen