为什么GraphQL要求我有一个返回空对象的解析器?

时间:2019-07-18 11:09:46

标签: graphql

所以,当我有一个模式时:

type Query { me: Me } 
type Me { hello: String }

我希望有一个令人满意的解析器:

const resolvers = {
  Me: {
     hello() { return "Hi, me!"; }
  }
}

A,不是这种情况,我必须添加一个虚拟me解析器(见下文)。

为什么会这样?

我想说它应该遍历查询,如果找不到令人满意的field-resolver,它应该寻找对应的type-resolver。

const { graphql } = require("graphql");
const { makeExecutableSchema } = require("graphql-tools");
const compose = require("compose-function");

const typeDefs = `
  type Query {
    me: Me
  }

  type Me {
    hello: String!
  }
`;

const resolvers = {
  Query: {
// ===========================>
    me() {
      return {};
    }
// <===========================
  },
  Me: {
    hello() {
      return "Hi, me!";
    }
  }
};

const schema = makeExecutableSchema({
  typeDefs,
  resolvers
});

graphql(schema, "{ me { hello } }").then(
  compose(
    console.log,
    JSON.stringify
  )
); // {"data":{"me":{"hello":"Hi, me!"}}}

1 个答案:

答案 0 :(得分:0)

好的,我已经弄清楚了。实际上这很有道理。

null是有效的回复。仅当存在具有查询所需属性的对象时,它才应寻找下一个解析器来满足该查询。

它也写在规范中的错误和非空字段https://graphql.github.io/graphql-spec/June2018/#sec-Executing-Selection-Sets