web-dev-qa-db-ja.com

タイプ\ "User \"のフィールド\ "me \"にはサブフィールドの選択が必要です

こんにちはGraphQL言語を学習しようとしています。以下のコードスニペットがあります。

// 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,
//   };
// };

要求:

{
  me
}

応答:

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

誰かが私が間違っていることを知っていますか?修正方法

17
N Sharma

ドキュメントから

GraphQLオブジェクトタイプには名前とフィールドがありますが、ある時点でそれらのフィールドはいくつかの具体的なデータに解決する必要があります。それがスカラー型の出番です。これらはクエリの葉を表します。

GraphQLでは、具象データのみを返す方法でクエリを作成する必要があります。各フィールドは、最終的に1つ以上のスカラー(または列挙)に解決する必要があります。つまり、その型のどのフィールドを取得したいかを示すことなく、型に解決されるフィールドを要求することはできません。

それはあなたが受け取ったエラーメッセージがあなたに伝えるものです-あなたはUserタイプを要求しましたが、そのタイプから戻るように少なくとも1つのフィールドにGraphQLを伝えませんでした。

修正するには、リクエストを次のようにnameを含むように変更します。

{
  me {
    name
  }
}

...またはage。または両方。ただし、特定のタイプを要求して、GraphQLがすべてのフィールドを提供することを期待することはできません。そのタイプのフィールドの選択(1つ以上)を常に提供する必要があります。

33
Daniel Rearden