【问题标题】:Send json as query body via rest call通过 rest 调用将 json 作为查询正文发送
【发布时间】:2020-09-23 21:49:15
【问题描述】:

我需要通过rest发送json的请求,客户端(rest)的代码是Node,服务端的代码是golang。

身体如下图

const query = "{\"query\":\"query {n  result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") {n    idn    namen    providerNamen    descriptionn    integrationSystemIDn    labelsn    status {n      conditionn      timestamptn    }}n}\"}"

当我运行代码时,我从服务器收到以下错误 (go) 我用

这是电话

const app = await fetch(`https://eway-auth-oauth.kh.de-arch.sho.ca.k8s-han.znd.com/dir/graphql`, {
    method: 'post',
    body: queryBody,
    headers: {
        'Accept-Encoding': 'gzip, deflate, br',
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Connection': 'keep-alive',
        'DNT': '1',
        'Origin': 'https://eway-auth.kh.devx-ar.znd.com',
        'authorization': 'Bearer xxxxxxxxxxxxxxx',
        'tenant': '3e6rezae-38b5-46a0-b1ed-9ccee153a0am'
    }
});
return {
    ky: await app.json(),
}

错误

json body could not be decoded: invalid character 'z' after object key:value pair

zapplication(id:z.... 中的起始后者 这是我需要发送的号码。

知道我该如何克服这个问题吗?我挣扎了两天

顺便说一句,

当我尝试使用 curl 命令时,它可以工作,当我将数据从终端复制到 js 变量 query 时出现错误,不确定方式:(

更新

这是 适合我的 curl(上面的代码不...)

curl `https://eway-auth-oauth.kh.de-arch.sho.ca.k8s-han.znd.com/dir/graphql` \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Connection: keep-alive' \
-H 'DNT: 1' \
-H 'Origin: https://eway-auth.kh.devx-ar.znd.com \
-H 'authorization: Bearer xxxxxxxxxxxxxxx' \
-H 'tenant: 3e6rezae-38b5-46a0-b1ed-9ccee153a0am' \
--data-binary '{\”query\":\"query {\n  result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") {\n    id\n    name\n    providerName\n    description\n    integrationSystemID\n    labels\n    status {\n      condition\n      timestampt\n    \n}\n}\n}\"}'
 \
--compressed

【问题讨论】:

  • queryBody 中应该包含的内容
  • 那不是 json,而是 javascript 或一些字符串。这就是为什么它不起作用。 fetch 方法的选项部分,即 json。 + 你能正确格式化你的身体吗?目前很难阅读。
  • 你正在字符串化一个字符串?
  • 如果您需要帮助,请发布 Go 代码。否则,删除 Go 标记。
  • 试试这个:const query = {"query":"query {\n result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") {\n id\n name\n providerName\n description\n integrationSystemID\n labels\n status {\n condition\n timestampt\n \n}\n}\n}"} 这至少是正确的转义 json。还有queryBody = JSON.stringify(query)

标签: javascript node.js json rest graphql


【解决方案1】:

json 在您的字符串表示形式中未正确转义。特别是有必要转义值中的引号并转义反斜杠。 这意味着" => \" 或者,如果已经转义,\" => \\\" 和例如\n => \\n.

您可以将 json 直接分配给查询。在这种情况下,如果 json 无效,您的 IDE 通常已经在抱怨。

const query = {
  "query": "query {\n  result: application(id: \"fb7b5992-4d0a-4782-acb7-13ae6cc66102\") {\n    id\n    name\n    providerName\n    description\n    integrationSystemID\n    labels\n    status {\n      condition\n      timestampt\n    \n}\n}\n}"
};

您也可以使用' 来避免转义。在大多数情况下,这不应该有所作为。即使我不确定您在后端的解析器是否可以正常使用。

const query = {
  "query": "query {\n  result: application(id: 'fb7b5992-4d0a-4782-acb7-13ae6cc66102') {\n    id\n    name\n    providerName\n    description\n    integrationSystemID\n    labels\n    status {\n      condition\n      timestampt\n    \n}\n}\n}"
};

之后您需要将其作为字符串传递给您的 http 请求:

const queryBody = JSON.stringify(query);

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2017-01-27
    • 2023-03-13
    • 2022-01-25
    • 2016-11-03
    • 2023-01-25
    相关资源
    最近更新 更多