Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有自定义标量类型的GraphQL.js变体_Javascript_Geojson_Graphql_Graphql Js - Fatal编程技术网

Javascript 具有自定义标量类型的GraphQL.js变体

Javascript 具有自定义标量类型的GraphQL.js变体,javascript,geojson,graphql,graphql-js,Javascript,Geojson,Graphql,Graphql Js,我在GraphQL中有一个基于GeoJSON的API,我正在尝试对其进行修改。我正在使用graphql geojson中的一些类型。输入类型和变异的定义如下: #。。。从graphql geojson。。。 var CoordinatesScalar=新的ScalarType({ 名称:“地理坐标”, 描述:“一组(多维)坐标,按x、y、z顺序排列。”, 序列化:强制坐标, parseValue:强制坐标, parseLiteral:parseCoordinates}) # ... schema

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

#。。。从graphql geojson。。。
var CoordinatesScalar=新的ScalarType({
名称:“地理坐标”,
描述:“一组(多维)坐标,按x、y、z顺序排列。”,
序列化:强制坐标,
parseValue:强制坐标,
parseLiteral:parseCoordinates})
# ... schema.js。。。
var waypointInputType=新的GraphQlinputObject类型({
名称:“航路点输入”,
字段:{…schema.js…]
var waypointInputType=新的GraphQlinputObject类型({
名称:“航路点输入”,
字段:{
类型:{type:GraphQLString},
坐标:{type:CoordinatesScalar}
}
});
var missionInputType=新的GraphQInputObject类型({
名称:“任务输入”,
字段:()=>({
航路点:{type:waypointInputType},
最大地面速度:{type:GraphQLFloat}
})
});
var createMission={
类型:任务类型,
描述:“创建新任务。”,
args:{
任务:{type:missionInputType}
},
解析(值,{mission}){
返回模型.Mission.create(Mission).then(Mission=>Mission);
}
};
#…在架构定义中。。。
突变:新的GraphQLObjectType({
名称:“RootMutationType”,
字段:{
创造使命
}
})
在graphiql中,我发布了一个类似

mutation {
  createMission(mission: {
    waypoints: {
      type: "LineString",
      coordinates: [[1, 2], [3, 4]]
    }
  }) {
    id
  }
}
保存一些新坐标并查询创建的任务id。但是,graphql抛出一个错误,即
参数任务具有无效值[…]坐标:预期类型GeoJSONCoordinates,找到[[1,2],[3,4]]
。我可以在坐标中放置任意字符串,但嵌套数组似乎不起作用。使用引号中的嵌套数组,我可以在查询时返回字符串:

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

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

如果使用完整语法来发出变异,可以指定输入类型:

mutation CreateMission(mission: MissonInput) {
  createMission(mission: $mission) {
    id
  }
}
然后您可以提供变量:

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

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

我遇到的问题是,我使用了一个第三方标量,该标量以奇怪的方式序列化/反序列化(将文本转换为DB,但不会转换为JSON)-严格来说,您的答案是正确的,但这是一个不同的问题。谢谢!@shadowchris,您是否避免使用
graphql geojson
,或者找到了解决方法?我在尝试使用该库时遇到了与您相同的问题。如果您确定了任何数据库,我认为
graphql geojson
中的类型都可以您正在使用的是返回正确类型的对象,否则您必须编写一个反序列化程序。对我来说,我想我使用的是sequelize,正如我所提到的,它对字符串和json做了一些奇怪的处理。