使用 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

尝试发送 json 对象时,fetch api 如何与 express 一起使用

向Tomcat发送POST请求时如何解决浏览器中的Javascript fetch API错误?