2017-02-28 50 views
2

我在GraphQL中有一個基於GeoJSON的API,我試圖在上進行突變。我正在使用graphql-geojson中的一些類型。輸入類型和突變的定義如下:具有自定義標量類型的GraphQL.js突變

# ... from graphql-geojson ... 
var CoordinatesScalar = new ScalarType({ 
name: 'GeoJSONCoordinates', 
description: 'A (multidimensional) set of coordinates following x, y, z order.', 
serialize: coerceCoordinates, 
parseValue: coerceCoordinates, 
parseLiteral: parseCoordinates}) 


# ... schema.js ... 
var waypointInputType = new GraphQLInputObjectType({ 
    name: 'WaypointInput', 
    fields: {... schema.js ...] 
var waypointInputType = new GraphQLInputObjectType({ 
    name: 'WaypointInput', 
    fields: { 
    type: {type: GraphQLString}, 
    coordinates: {type: CoordinatesScalar} 
    } 
}); 
var missionInputType = new GraphQLInputObjectType({ 
    name: 'MissionInput', 
    fields:() => ({ 
    waypoints: {type: waypointInputType}, 
    max_groundspeed: {type: GraphQLFloat} 
    }) 
}); 

var createMission = { 
    type: missionType, 
    description: 'Create a new mission.', 
    args: { 
    mission: {type: missionInputType} 
    }, 
    resolve(value, {mission}) { 
    return models.Mission.create(mission).then(mission => mission); 
    } 
}; 

# ... in schema definition ... 
mutation: new GraphQLObjectType({ 
name: 'RootMutationType', 
fields: { 
    createMission 
} 
}) 

在graphiql,我喜歡發行

mutation { 
    createMission(mission: { 
    waypoints: { 
     type: "LineString", 
     coordinates: [[1, 2], [3, 4]] 
    } 
    }) { 
    id 
    } 
} 

的突變,以節省一些新的座標和查詢所創建的任務ID。但是,graphql會引發一個錯誤Argument mission has invalid value [...] coordinates: expected type GeoJSONCoordinates, found [[1, 2], [3, 4]]。我可以在座標中放入任意字符串,但嵌套數組似乎不起作用。隨着行情嵌套數組,我得到一個字符串回來時,我查詢:

{ 
"waypoints": { 
      "type": "LineString", 
      "bbox": null, 
      "coordinates": "[[1, 2], [3, 3]]" 
     } 
} 

我可以用CoordinatesScalar爲輸入型,或者我需要定義CoordinatesScalar可以專門解析了輸入的輸入類型?

回答

1

如果您使用完整的語法發出突變,您可以指定類型的輸入:

mutation CreateMission(mission: MissonInput) { 
    createMission(mission: $mission) { 
    id 
    } 
} 

然後你就可以提供變量:

{ 
    mission: { 
    waypoints: { 
     type: "LineString", 
     coordinates: [[1, 2], [3, 4]] 
    } 
    } 
} 

我不知道,如果這將解決它,讓我知道! :)

+0

我遇到的問題是,我使用的第三方標量,序列化/反序列化奇怪(文本到數據庫,但沒有進入JSON的出路) - 您的答案嚴格來說是正確的,但它是一個不同的問題。雖然謝謝! –