2015-11-30 12 views
5

GraphQL'de bir GeoJSON nesne türü oluşturmaya çalışıyorum. Ben GraphQLFloat s 4 boyutlu bir dizi belirtmek ne zaman sunucuyu başlattığınızdaGraphQL'de, yuvalanmış dizileri alan türü olarak nasıl belirleyebilirim?

, bir hata alıyorum:

Error: Decorated type deeper than introspection query. 

tip tanımı aşağıdaki gibidir

:

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, 
    } 
    } 
}); 

Ben nasıl Bu hatayı çöz Bu kaynağın atılmış nerede olduğunu:

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

cevap

6

Biz bir nesne türü yerine GeoJSON sayıl tür tanımlama sona erdi. Bu, GeoJSON spesifikasyonlarına karşı sıkı validasyonlar yapmamızı sağlar.

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; 
    } 
}); 

... bize bu gibi kullanmak için izin verir: Yapabilirsin

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

Şimdilik, sadece bize yürümeye devam etmek, bir (tamamen uygulanmamış) özel GeoJSON tipini tanımladık Diziler dizisini temsil edecek şekilde özel bir tür tanımlamak için bu stratejiyi kullanın veya yalnızca iç içe dizileri temsil edecek şekilde özel bir tür tanımlayın ve sonra new GraphQLList(CoordinatesType) vb. kullanın. Bu, modellemeye dayalı verilere bağlıdır.

İlgili konular