4 votes

Récupération d'objets uniques et multiples via GraphQL

Je suis à moins de quelques semaines d'utilisation d'Apollo et GraphQL, et je voudrais récupérer plusieurs objets via GraphQL, mais il ne me le permet pas.

Avec la requête comme suit :

const GET_ALL_PURCHASES_QUERY = (statusOfPurchase) => {
  return gql`
  query {
    getAllPurchases(statusOfPurchase: "${statusOfPurchase}") {
      id
      customerInformation {
        customerName
        customerEmailAddress
      }
      createdAt
      updatedAt
    }
  }
`
}

... et dans le schéma :

const RootQuery = new GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    getAllPurchases: {
      type: PurchaseType,
      args: {
        statusOfPurchase: {
          type: new GraphQLNonNull(GraphQLString)
        }
      },
      resolve(parent, args) {
        return PurchasesModel.schemaForPurchases.find({
          statusOfPurchase: args.statusOfPurchase
        }).limit(10)
          .then(purchases => {
            console.log('Schema:getAllPurchases()', purchases)
            return purchases
          })
      }
    }
  }
})

Le résultat dans Node via le Terminal est :

Schema:getAllPurchases() [
  {
    _id: 60351a691d3e5a70d63eb13e,
    customerInformation: [ [Object] ],
    statusOfPurchase: 'new',
    createdAt: 2021-02-23T15:08:25.230Z,
    updatedAt: 2021-02-23T15:08:25.230Z,
    __v: 0
  },
  {
    _id: 60351b966de111716f2d8a6d,
    customerInformation: [ [Object] ],
    statusOfPurchase: 'new',
    createdAt: 2021-02-23T15:13:26.552Z,
    updatedAt: 2021-02-23T15:13:26.552Z,
    __v: 0
  }
]

Correct.

Mais dans l'application sur Chrome, c'est un seul objet avec null comme valeur de chaque champ.

Avec la requête comme suit :

const GET_ALL_PURCHASES_QUERY = () => {
  return gql`
  query {
    getAllPurchases {
      id
      customerInformation {
        customerName
        customerEmailAddress
      }
      createdAt
      updatedAt
    }
  }
`
}

... et avec les modifications appropriées du schéma, le résultat est le même qu'avant, où je vois deux objets dans Node mais un seul objet échoué dans Chrome.

Si je change : return purchases par : return purchases[0] je vois le premier objet dans Chrome avec les valeurs correctes.

Comment suis-je censé retourner plus d'un objet ?

2voto

Alex Coleman Points 3927

Votre type pour le champ getAllPurchases est défini comme PurchaseType dans le schéma. Vous voulez utiliser new GraphQLList (PurchaseType) pour que le type de retour soit une liste d'achats. C'est pourquoi lorsque vous essayez d'utiliser le schéma, il renvoie null si les types sont incorrects, mais renvoie correctement un achat si vous renvoyez un seul élément.

Voir la documentation graphql pour un exemple de ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X