我想传递给对象抛出graphql
API的服务器数组。
我对架构的查询
export const schema = buildSchema(`
type Query {
statistics(
modelId: String
picksEnds: [PickEnd]
)
}: Statistics
type PickEnd {
end: String
limit: float
}
...
`)
我基于js的客户端查询:
const createStatisticsQuery = (...) => {
return `query {
statistics(
modelId: "${modelId}",
picksEnds: ${JSON.stringify(myEnds)}
) ...
但是从graphql
中获取错误:
消息:“语法错误:预期名称,找到字符串“ end””
请求有效内容的片段:
{“ query”:“查询{\ n统计信息(\ n modelId: \“ 5ca0f4afb88b3a2e006faa0d \”,\ n 结束时间: [{\“ end \”:\“ home \”},{\“ end \”:\“ draw \”},{\“ end \”:\“ away \”},{\“ end \”: \“ under \”,\“ limit \”:0.5},{\“ end \”:\“ over \”,\“ limit \”:0.5},{\“ end \”:\“ under \”, \“极限\”:1.5 ...
答案 0 :(得分:1)
虽然GraphQL语法类似于JSON,但是您不能通过调用JSON.stringify
然后将结果插入模板字符串来在GraphQL文档中使用JSON。
GraphQL期望什么:
[{end:"foo",limit:2.0}]
使用stringify
可以做什么:
[{"end":"foo","limit":2.0}]
由于该语法无效,因此将引发错误。解决此问题的最简单方法是利用变量来提供所需的输入,因为变量值以JSON的形式提供。
# Note: Replace PickEndInput with whatever your input type is actually called
query StatsQuery($id: String!, $ends: [PickEndInput!]!) {
statistics(modelId: $id, picksEnds: $ends) {
# ...
}
}
然后,您可以为变量构造一个JavaScript对象,并将其传递给fetch
,axios
或任何用于发出请求的对象。例如:
const variables = {
id: 'SOME_ID',
ends: [
{
end:'foo',
limit: 2.0,
},
],
}
const query = ...
fetch('SOME_ENDPOINT_URL', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ variables, query }),
})
理想情况下,您希望使用Apollo之类的现有客户端来简化这些调用。