在GraphQL中,我正在尝试创建一个GeoJSON对象类型。
当我指定GraphQLFloat
的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,
}
}
});
如何解决此错误?这是源于它的地方:
答案 0 :(得分: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)
等。这取决于您的数据&# 39;重新建模。