【问题标题】:Field \"me\" of type \"User\" must have a selection of subfields\"User\" 类型的字段 \"me\" 必须有一个子字段选择
【发布时间】:2019-10-02 09:32:28
【问题描述】:

您好,我正在努力学习GraphQL 语言。我有以下 sn-p 代码。

// 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
        }
      ]
    }
  ]
}

有谁知道我做错了什么?如何解决?

【问题讨论】:

    标签: javascript graphql graphql-js


    【解决方案1】:

    From the docs:

    GraphQL 对象类型具有名称和字段,但在某些时候 字段必须解析为一些具体的数据。这就是标量 类型进来:它们代表查询的叶子。

    GraphQL 要求您以仅返回具体数据的方式构建查询。每个字段最终都必须解析为一个或多个标量(或枚举)。这意味着您不能只请求一个解析为某个类型的字段,而不指明您想要返回该类型的哪些字段。

    这就是您收到的错误消息告诉您的内容 - 您请求了 User 类型,但您没有告诉 GraphQL 至少一个字段从该类型返回。

    要修复它,只需将您的请求更改为包含name,如下所示:

    {
      me {
        name
      }
    }
    

    ...或age。或两者。但是,您不能请求特定类型并期望 GraphQL 为其提供所有字段——您将始终必须为该类型提供一个(一个或多个)字段选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-23
      • 2021-01-09
      • 2016-06-12
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多