首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自定义标量类型的GraphQL.js变异

具有自定义标量类型的GraphQL.js变异
EN

Stack Overflow用户
提问于 2017-02-28 03:53:33
回答 1查看 1.1K关注 0票数 2

我在GraphQL中有一个基于GeoJSON的API,我正在尝试对其进行突变。我正在使用中的一些类型。输入类型和突变的定义如下:

代码语言:javascript
复制
# ... 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
}
})

在石墨画中,我发出一个突变,就像

代码语言:javascript
复制
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]]错误。我可以在坐标中放置任意字符串,但是嵌套数组似乎不起作用。使用引号中的嵌套数组,在查询时会得到一个字符串:

代码语言:javascript
复制
{
 "waypoints": {
          "type": "LineString",
          "bbox": null,
          "coordinates": "[[1, 2], [3, 3]]"
      }
}

我是否可以使用CoordinatesScalar作为输入类型,或者是否需要定义CoordinatesScalar可以为输入专门解析的输入类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 15:01:06

如果使用完整的语法进行突变,则可以指定输入的类型:

代码语言:javascript
复制
mutation CreateMission(mission: MissonInput) {
  createMission(mission: $mission) {
    id
  }
}

然后您可以提供变量:

代码语言:javascript
复制
{
  mission: {
    waypoints: {
      type: "LineString",
      coordinates: [[1, 2], [3, 4]]
    }
  }
}

我不确定这是否能解决这个问题,让我知道!:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42499895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档