我正在尝试使用grahql服务器包装外部api。
如果我在外部api上调用以下端点:https://api.goingelectric.de/chargepoints/?key=secret&lat=49.5543&lng=11.0257&radius=5&ge_id=900
我收到正确的结果:
{
"status": "ok",
"chargelocations": [
{
"ge_id": 900,
"name": "Rathausplatz",
"address": {
"city": "Erlangen",
"country": "Deutschland",
"postcode": "91052",
"street": "Schuhstraße 44"
},
"coordinates": {
"lat": 49.591301,
"lng": 11.0087
},
"chargepoints": [
{
"count": 2,
"power": 22,
"type": "Typ2"
}
]
}
]
}
但是,如果尝试使用graphql调用此端点,则总是收到null
这是我的schema.js:
<script src="https://gist.github.com/FlonTaut/bc1bf5f653ff737b7db78aaabc0ce52a.js"></script>
它与端点的调用完全相同,但是没有收到应答。
我需要将我的json.station
重命名为json.chargepoints
还是答案status: ok
遇到了麻烦,我需要以某种方式忽略它?
我可以添加稍后运行查询的方式,但只是
station(lat:...,lng:...) {
name
address {
city
street
}
例如具有相同的坐标 如果我错过任何需要的信息,请告诉我
已经感谢
编辑:现在我尝试了一些,现在遇到了另一个问题。
那就是我当前的StationType
,所以是个漏洞:
const StationType = new GraphQLObjectType({
name: "Station",
description: "...",
fields: {
name : {
type: GraphQLString,
description: "Name of the Station",
resolve: (parent, args, context) => {
return parent.name;
}
},
address: {
type: new GraphQLObjectType(AdressType)
},
coordinates: {
type: new GraphQLObjectType(CoordType)
}
}
})
这是我的CoordType
,其中包含坐标:
`const CoordType = new GraphQLObjectType({
名称:“ Coodinates”,
描述:“包含充电点的经度和纬度的对象”,
fields: () => ({
lat: {
type: GraphQLString,
description: "Latitude Coordinates of the Chargepoint",
resolve: (parent, args, context) => {
return parent.coordinates.lat;
}
},
lng: {
type: GraphQLString,
description: "Longtitude Coordinates of the Chargepoint",
resolve: (parent, args, context) => {
return parent.coordinates.lng;
}
}
})
})
但是我知道在打开GraphiQL时收到以下错误:
Type Coodinates must define one or more fields."
与AdressType相同。那么问题出在哪里呢? CoordType恰好定义了两个字段。
答案 0 :(得分:1)
您需要返回您的决心。现在,您只需拨打网络电话,结果什么都没有。
您有:
False
您需要:
resolve: (root, args) => {
getStationsByURL(`lat=${args.lat}&lng=${args.lng}&radius=5`)
}
Javascript中的默认返回值为resolve: (root, args) => {
return <network call + any data access inside of it that's needed>
}
,graphql会将解析器返回的undefined
转换为undefined
。
更新:基于以下评论中的对话:
假设从您的JSON响应返回的对象如下:
null
然后您的graphql类型定义可能类似于:
{
data: {
bar: 1337,
foo: 'Hi',
}
}
请注意,GraphQL提供了默认解析器。因此,例如,如果您的API调用返回的数据如下:
const MyType = new GraphQLObjectType({
name: 'MyType',
fields: {
bar: {
type: GraphQLInt,
resolve: (parent, args, context) => {
return parent.data.bar;
},
},
foo: {
type: GraphQLString,
resolve: (parent, args, context) => {
return parent.data.foo;
}
},
},
});
然后,您无需提供任何解析程序。默认解析器使用该字段的名称,并尝试在父对象中找到相同的名称。