GraphQL zeigt Wert als null

stimmen
0

Ich lerne GraphQL und ich habe zwei Objekttypen.

Sprich, sie so aussehen

Sprich: Das Buch Typ sieht wie folgt aus

const BookType = new GraphQLObjectType({  
    name: 'Book',  
    fields: () => ({ 
        id: { type:  GraphQLID},
        name: { type: GraphQLString},
        genre: { type: GraphQLString }, 
        author: { 
            type: authorType,
            resolve(parents, args) {
               Author.findOne( 
                   {
                    name: parents.authorName
                   }, function(err, result) {
                       console.log(result)
                       return result
                   })
            }
        }

    })
})

und Verfasser Typ sieht wie folgt aus

const authorType = new GraphQLObjectType({  
    name: 'author',  
    fields: () => ({ 
        id: { type:  GraphQLID},
        name: { type: GraphQLString},
        age: { type: GraphQLInt },
        books: {  
            type: new GraphQLList(BookType), 
            resolve(parent, args) {
            }
        }
    })
})

Nun, ich Daten durch Mutation Hinzufügen (nicht teilen sie, weil ich denke , dass es irrelevant ist) und dann Abfrage ausführen in graphqlDaten in Buchtyp hinzuzufügen. Es zeigt Daten korrekt nach Namen, Genre, id aber für Author es die Daten als null angezeigt wird, während die Konsole] .log Ergebnisse so etwas wie dies in der Konsole einloggen

//This is console log in terminal
{ age: 'none',
  _id: 5bcaf8904b31d50a2148b60d,
  name: 'George R Martin',
  __v: 0 }

Dies ist die Abfrage , die ich in leite graphiql

mutation{
        addBooks( 
           name: Game of Thrones,
           genre: Science Friction, 
            authorName: George R Martin
            ) {
           name,
           genre,
           author {
           name
                }
              }
           }

Mein gesamtes Schema ist hier verfügbar

Kann jemand bitte-bitte helfen Sie mir herauszufinden, was könnte ich falsch gemacht?

Veröffentlicht am 20/10/2018 um 12:49
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Ein Resolver muss entweder einen Wert oder ein Versprechen zurück, die in einem Wert aufgelöst werden - wenn es nicht das Feld zurückkehren wird null aufgelöst werden. Es gibt also zwei Dinge über Ihren Code aus. One, Sie kehren nicht zurück entweder einen Wert oder ein Versprechen. Zwei, kehren Sie etwas in einem Rückruf, aber das ist nicht wirklich etwas zu tun, da die meisten Bibliotheken des Rückgabewert einer Callback-Funktion sowieso außer Acht lassen.

Sie können einen Rückruf in einem Versprechen wickeln , aber das ist viel des Guten geht hier vor, weil Mungo bereits eine Möglichkeit bietet , ein Versprechen zurück - nur den Rückruf ganz weglassen.

resolve(parent, args) {
  return Author.findOne({name: parent.authorName)
}

Ihre Mutation Resolver funktioniert , weil Sie den Wert zurück durch den Aufruf zurückgeben save(), was tatsächlich ein Versprechen zurück, die auf den Wert der Modellinstanz lösen wird gespeichert worden .

Beantwortet am 20/10/2018 um 13:32
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more