2015-11-30 5 views
5

W GraphQL próbuję utworzyć typ obiektu GeoJSON.W GraphQL, jak mogę określić zagnieżdżone tablice jako typ pola?

Kiedy podać 4-wymiarową tablicę GraphQLFloat s, pojawia się błąd przy uruchomieniu serwera:

Error: Decorated type deeper than introspection query. 

Definicja rodzaj wygląda następująco:

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

Jak mogę rozwiązać ten błąd? To gdzie jest wyrzucane w źródle:

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

Odpowiedz

6

Skończyło się definiująca typ GeoJSON skalarnego zamiast typu obiektu. To pozwoliłoby nam na wykonywanie ścisłych walidacji w odniesieniu do specyfikacji GeoJSON. Na razie wystarczy, aby utrzymać nas w ruchu, jakie zdefiniowano (całkowicie ZAIMPLEMENTOWANE) niestandardowy typ 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; 
    } 
}); 

... co pozwala na wykorzystanie go w ten sposób:

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

mogłeś użyj tej strategii, aby zdefiniować niestandardowy typ reprezentujący tablicę tablic lub zdefiniować niestandardowy typ reprezentujący tylko zagnieżdżone tablice, a następnie użyj new GraphQLList(CoordinatesType) itp. To zależy od danych, które modelujesz.

Powiązane problemy