web-dev-qa-db-fra.com

Le champ \ "moi \" de type \ "Utilisateur \" doit avoir une sélection de sous-champs

Salut, j'essaie d'apprendre la langue GraphQL. J'ai ci-dessous un extrait de code.

// Welcome to Launchpad!
// Log in to edit and save pads, run queries in GraphiQL on the right.
// Click "Download" above to get a Zip with a standalone Node.js server.
// See docs and examples at https://github.com/apollographql/awesome-launchpad

// graphql-tools combines a schema string with resolvers.
import { makeExecutableSchema } from 'graphql-tools';

// Construct a schema, using GraphQL schema language
const typeDefs = `
    type User {
        name: String!
        age: Int!
    }

    type Query {
        me: User
    }
`;

const user = { name: 'Williams', age: 26};

// Provide resolver functions for your schema fields
const resolvers = {
  Query: {
    me: (root, args, context) => {
      return user;
    },
  },
};

// Required: Export the GraphQL.js schema object as "schema"
export const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

// Optional: Export a function to get context from the request. It accepts two
// parameters - headers (lowercased http headers) and secrets (secrets defined
// in secrets section). It must return an object (or a promise resolving to it).
export function context(headers, secrets) {
  return {
    headers,
    secrets,
  };
};

// Optional: Export a root value to be passed during execution
// export const rootValue = {};

// Optional: Export a root function, that returns root to be passed
// during execution, accepting headers and secrets. It can return a
// promise. rootFunction takes precedence over rootValue.
// export function rootFunction(headers, secrets) {
//   return {
//     headers,
//     secrets,
//   };
// };

Demande:

{
  me
}

Réponse:

{
  "errors": [
    {
      "message": "Field \"me\" of type \"User\" must have a selection of subfields. Did you mean \"me { ... }\"?",
      "locations": [
        {
          "line": 4,
          "column": 3
        }
      ]
    }
  ]
}

Est-ce que quelqu'un sait ce que je fais mal? Comment le réparer ?

17
N Sharma

À partir des documents :

Un type d'objet GraphQL a un nom et des champs, mais à un moment donné, ces champs doivent se résoudre en données concrètes. C'est là qu'interviennent les types scalaires: ils représentent les feuilles de la requête.

GraphQL requiert que vous construisiez vos requêtes d'une manière qui ne renvoie que des données concrètes . Chaque champ doit finalement être résolu en un ou plusieurs scalaires (ou énumérations). Cela signifie que vous ne pouvez pas simplement demander un champ qui se résout en un type sans également indiquer les champs de ce type que vous souhaitez récupérer.

C'est ce que le message d'erreur que vous avez reçu vous dit - vous avez demandé un type User, mais vous n'avez pas dit à GraphQL au moins un champ de revenir de ce type.

Pour le corriger, modifiez simplement votre demande pour inclure name comme ceci:

{
  me {
    name
  }
}

... ou age. Ou les deux. Cependant, vous ne pouvez pas demander un type spécifique et vous attendre à ce que GraphQL fournisse tous les champs pour cela - vous devrez toujours fournir une sélection (un ou plusieurs) de champs pour ce type.

33
Daniel Rearden