2016-09-21 5 views
1

Ich habe das folgende "Problem". Ich bin es gewohnt, eine solche API zu haben.GraphQL Liste oder einzelnes Objekt

/users 
/users/{id} 

Der erste gibt eine Liste der Benutzer zurück. Das zweite ist nur ein einziges Objekt. Ich möchte das gleiche mit GraphQL, aber scheinen zu scheitern. Ich habe folgendes Schema

var schema = new GraphQLSchema({ 
    query: new GraphQLObjectType({ 
    name: 'Query', 
    fields: { 
     users: { 
     type: new GraphQLList(userType), 
     args: { 
      id: {type: GraphQLString} 
     }, 
     resolve: function (_, args) { 
      if (args.id) { 
      return UserService.findOne(args.id).then(user => [user]); 
      } else { 
      return UserService.find() 
      } 
     } 
     } 
    } 
    }) 
}); 

Wie kann ich den Benutzertyp ändern, um entweder eine Liste oder ein einzelnes Objekt zurückzugeben?

Antwort

4

Sie sollten ein Feld nicht für andere Zwecke verwenden. Erstellen Sie stattdessen zwei Felder. Eine für einzelnes Objekt und eine weitere für eine Liste von Objekten. Es ist besser, Praxis und besser für die Prüfung

fields: { 
    user: { 
     type: userType, 
     description: 'Returns a single user', 
     args: { 
      id: {type: GraphQLString} 
     }, 
     resolve: function (_, args) { 
      return UserService.findOne(args.id); 
     } 
    }, 
    users: { 
     type: new GraphQLList(userType), 
     description: 'Returns a list of users', 
     resolve: function() { 
      return UserService.find() 
     } 
    } 
} 
+2

Sie haben Recht, nur kleine Korrektur, dann dann (user => [user]) nicht mehr benötigt :) – HagaiCo

+0

ich die gleiche Lösung hatte ... aber unter dem gleichen Name 'Benutzer' ist nicht möglich? – Daniel

+0

Ich habe versucht, Ihr Schema zu reproduzieren und alles funktioniert korrekt. Versuchen Sie console.log auf Ihrem '[user]' Ergebnis und sehen Sie, was Sie bekommen – LordDave

Verwandte Themen