如何以GraphQL架构语言

时间:2016-09-21 11:46:15

标签: graphql graphql-js

我正在阅读GraphQl的文档,并意识到新的Schema Langugage仅支持默认解析器。有没有办法在使用新的架构语言时添加自定义解析器?

let userObj = {
  id: 1,
  name: "A",
  homeAddress: {
    line1: "Line1",
    line2: "Line2",
    city: "City"
  }
};

let schema = buildSchema(`
  type Query {
    user(id: ID): User
  }

  type User {
    id: ID
    name: String
    address: String 
  }
`);

//I would like User.address to be resolved from the fields in the json response eg. address = Line1, Line2, City

这是我定义的架构。我想在这里添加一些行为,允许我解析地址对象并返回一个连接的字符串值。

2 个答案:

答案 0 :(得分:2)

正如HagaiCo和github issue所提到的,正确的方法是使用graphql-tools

  

它有一个名为 makeExecutableSchema 的函数,它接受一个模式并解析函数,然后返回一个可执行模式

答案 1 :(得分:0)

这里好像你有一个混乱,因为你定义了这个地址是String但是你发送了一个字典来解决它。

你能做的是定义一个标量地址类型: scalar AddressType如果您使用buildSchema,然后将解析函数附加到它。 (或使用graphql-tools轻松完成)

或从头开始构建类型,如the official documentations所示:

var OddType = new GraphQLScalarType({
  name: 'Odd',
  serialize: oddValue,
  parseValue: oddValue,
  parseLiteral(ast) {
    if (ast.kind === Kind.INT) {
      return oddValue(parseInt(ast.value, 10));
    }
    return null;
  }
});

function oddValue(value) {
  return value % 2 === 1 ? value : null;
}

然后你可以将字典解析为字符串(parseValue),否则