2015-11-30 13 views
5

GraphQLでは、私はGeoJSONオブジェクト型を作成しようとしています。GraphQLでは、ネストされた配列をフィールドタイプとしてどのように指定できますか?

私はGraphQLFloat Sの4次元配列を指定した場合、私は自分のサーバーを起動したとき、私はエラーを取得:

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

答えて

6

我々は代わりにオブジェクト型の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; 
    } 
}); 

...私たちはこのようにそれを使用することができます::今のところ、ちょうど移動する私たちを維持するために、我々は(完全に実装されていない)カスタムにGeoJSONタイプを定義した

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

あなたは可能性がありこのストラテジーを使用して、配列の配列を表すカスタム型を定義するか、ネストされた配列だけを表すカスタム型を定義してからnew GraphQLList(CoordinatesType)などを使用します。これはモデリングしているデータによって異なります。

関連する問題