使用 Javascript fetch 发送的 GraphQL 引用参数
Posted
技术标签:
【中文标题】使用 Javascript fetch 发送的 GraphQL 引用参数【英文标题】:GraphQL quoted parameter sent with Javascript fetch 【发布时间】:2019-10-04 18:25:43 【问题描述】:我正在尝试使用 javascript 查询 Graphql 端点,并且正在使用此 javascript 方法来创建我的查询:
module.exports = (uid) =>
`
rich_text_data_for_uid(uid:"$uid")
record_uid
field_name
row_number
value
`.replace(/\n/g, " ");
这是资源管理器中的有效查询:
rich_text_data_for_uid(uid:"31D2A75A3254D5EA852581D7006C2BA5")
record_uid
field_name
row_number
value
请注意,下面的 JSON 已被格式化以使其可读,但它在发送到服务器时没有换行符(通过上面的替换方法调用)
这是作为我的 fetch
请求的正文发送的内容,并导致问题(我怀疑是因为引号):
"query": "
rich_text_data_for_uid(uid:"31D2A75A3254D5EA852581D7006C2BA5")
record_uid
field_name
row_number
value
"
我也尝试转义引号,并将其作为有效负载发送:
"query": "
rich_text_data_for_uid(uid:\"31D2A75A3254D5EA852581D7006C2BA5\")
record_uid
field_name
row_number
value
"
我的 Graphql 响应总是 400:
POST 正文发送了无效的 JSON。
编辑当我尝试使用变量时,我也会收到错误:
"query":
" rich_text_data_for_uid(uid:$uid) record_uid field_name row_number value ",
"variables":"uid":"31D2A75A3254D5EA852581D7006C2BA5"
上面说
变量“$uid”未定义。
我要发送什么来将字符串参数传递给 Graphql?
【问题讨论】:
您是否明确致电fetch()
?添加代码如何发送请求
换行符不应该影响查询,如果需要,可以将它们留在查询字符串中。
@skyboyer 这不是fetch
的问题,我还有十几个其他查询以同样的方式工作,它们都很好。
@HRK44 - 正如你所说,换行符不应该。但是,如果我删除 .replace(/\n/g, " ")
我的查询不起作用,他们会这样做。因此,无论出于何种原因,它们都很重要。
【参考方案1】:
而不是删除问题 - 我将发布我制定的答案:
这是使其有效的方法 - 我们必须将查询字符串包装在一个参数化块中,该块描述我们正在传递的变量:
module.exports = (uid) =>
`query rd($uid: String)
rich_text_data_for_uid(uid:\$uid)
record_uid
field_name
row_number
pardef
value
`.replace(/\n/g, " ");
结合这个 JSON 数据,效果很好:
const query = JSON.stringify("query": richTextQueryForUid(uid), "variables": "uid": uid)
【讨论】:
以上是关于使用 Javascript fetch 发送的 GraphQL 引用参数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript Fetch API 发送的快速解析文件
JavaScript POST fetch 作为 OPTIONS 发送
使用 JavaScript Fetch 和 POST 发送表单数据,然后在 PHP 中处理它
如何使用 fetch 将 FormData 从 javascript 发送到 ASP.NET Core 2.1 Web API