8

GraphQL で、GeoJSON オブジェクト タイプを作成しようとしています。

s の4 次元配列を指定するとGraphQLFloat、サーバーの起動時にエラーが発生します。

Error: Decorated type deeper than introspection query.

型定義は次のようになります。

var GraphQLGeoJSON = new GraphQLObjectType({
  name: 'GeoJSON',
  fields: {
    type: {
      type: GraphQLString,
      resolve: (obj) => obj.type,
    },
    coordinates: {
      type: new GraphQLList(new GraphQLList(new GraphQLList(new GraphQLList(GraphQLFloat)))),
      resolve: (obj) => obj.coordinates,
    }
  }
});

このエラーを解決するにはどうすればよいですか? これは、ソースでスローされる場所です。

https://github.com/graphql/graphql-js/blob/568dc52a4f9cc9bdec4f9283e6e528970af06cde/src/utilities/buildClientSchema.js#L105

4

1 に答える 1

6

GeoJSONオブジェクト型の代わりにスカラー型を定義することになりました。これにより、GeoJSON 仕様に対して厳密な検証を実行できます。とりあえず、動き続けるために、(完全に未実装の) カスタム GeoJSON タイプを定義しました。

var GeoJSON = new GraphQLScalarType({
    name: 'GeoJSON',
    serialize: (value) => {
        // console.log('serialize value', value);
        return value;
    },
    parseValue: (value) => {
        // console.log('parseValue value', value);
        return value;
    },
    parseLiteral: (ast) => {
        // console.log('parseLiteral ast', ast);
        return ast.value;
    }
});

...これにより、次のように使用できます。

var Geometry = new GraphQLObjectType({
    name: 'Geometry',
    fields: () => ({
        id: globalIdField('Geometry'),
        geojson: {
            type: GeoJSON,
        },
    },
};

この戦略を使用して、配列の配列を表すカスタム型を定義するか、ネストされた配列のみを表すカスタム型を定義してからnew GraphQLList(CoordinatesType)などを使用できます。モデル化するデータによって異なります。

于 2016-01-10T18:41:48.860 に答える