graphQL中的对象突变

时间:2016-10-27 02:08:35

标签: graphql graphql-js

这是我的EventAttendee对象。

const EventAttendee = new GraphQLInputObjectType({
  name: 'EventAttendee',
  fields: () => ({
    attendeeName: {type: GraphQLString},
    personalizedDateSelection: {type: new GraphQLInputObjectType()}
  })
});

personalizedDateSelection 属性是动态属性,现在不知道其属性。所以,在这种情况下,我已经给出了 GraphQLInputObjectType()

但是它给出了一个错误,指出 EventAttendee.personalizedDateSelection字段类型必须是输出类型。

如何定义其属性未知的ObjectType?

2 个答案:

答案 0 :(得分:0)

我认为你想要定义一个InputObjectType而不是ObjectType

话虽如此,你可以做的是现在将personalizedDateSelection声明为一个字符串,然后在你知道它应该包含的内容后,根据需要使用自定义输入对象进行调整。 GraphQLInputObjectType用于定义输入对象类型,它不是本身的类型。

答案 1 :(得分:0)

我希望 EventAttendee personalizedDateSelection 属性属于objectType但我事先并不知道这些属性,但我确信它属于对象类型。

因此将此声明为GraphQLScalarType是正确的方法。查看GraphQLScalarType。但是我们需要创建一个自定义标量类型。所有标量类型都可以是输入类型。所以这是我的实现:

const PersonalizedDateSelection = new GraphQLScalarType({
    name: 'PersonalizedDateSelection',
    serialize: value => {
      return value;
    },
    parseValue: value => {
      return value;
    },
    parseLiteral: ast => {
      console.log("coming in parseLiteral");
      console.log(ast);
      let value = {};
      if (ast.kind !== Kind.OBJECT) {
        throw new GraphQLError("Query error: Can only parse object but got a: " + ast.kind, [ast]);
      }
      ast.fields.forEach(field => {
        value[field.name.value] = parseJSONLiteral(field.value);
      });

      return value;
    }
});