javascript——为什么我在FetchAPI上得到“必须提供查询字符串”,而在curl或postman上没有?

icomxhvb  于 2021-09-23  发布在  Java
关注(0)|答案(2)|浏览(259)

我试图在带有fetch api的react应用程序上使用graphbrainz库,但无论我如何格式化请求正文,此错误显示:
badrequesterror:必须提供查询字符串。在graphql中间件(c:\users\user\desktop\project\node\u modules\express graphql\index.js:76:44)上,在ProcessTicks和Rejections(internal/process/task\u queues.js:95:5)上
电话是这样打的:

let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

const raw = "{ \"query\": \"{ lookup { releaseGroup(mbid: \\\"99599db8-0e36-4a93-b0e8-350e9d7502a9\\\") { title } }}\"}";

const requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow',
  mode: 'no-cors'
};

fetch("http://localhost:3000", requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

我也试着给 Postman 和curl打过同样的电话,效果很好。
graphbrainz示例正在作为独立节点服务器运行。
有谁能指导我如何进行这项工作,或者我做错了什么?我已经用尽了几乎所有的stackoverflow问题和github线程。我认为这一定是ExpressGraphQL服务器上的bodyparser造成的,但我不知道如何更改/修改它,因为它来自我正在使用的包。

zqry0prt

zqry0prt1#

我认为您可能错误地转义了查询中的内部引号。试着替换 \"99599db8-0e36-4a93-b0e8-350e9d7502a9\" 具有 \\\"99599db8-0e36-4a93-b0e8-350e9d7502a9\\\" .

qyuhtwio

qyuhtwio2#

你能试着在发送之前把你的身体有效载荷串起来吗。

const raw = JSON.stringify({
  "query": "{ lookup { releaseGroup(mbid: \"99599db8-0e36-4a93-b0e8-350e9d7502a9\") { title } }}"
});

这样做将使您的负载严格化为

"{\"query\":\"{ lookup { releaseGroup(mbid: \\\"99599db8-0e36-4a93-b0e8-350e9d7502a9\\\") { title } }}\"}"

相关问题