13

我正在尝试使用 GraphQL 查询发出 POST 请求,但它返回错误Must provide query string,即使我的请求在 PostMan 中有效。

这是我在 PostMan 中运行它的方式:

在此处输入图像描述

在此处输入图像描述

这是我在应用程序中运行的代码:

const url = `http://localhost:3000/graphql`;    
return fetch(url, { 
  method: 'POST',
  Accept: 'api_version=2',
  'Content-Type': 'application/graphql',
  body: `
    {
      users(name: "Thomas") { 
        firstName
        lastName 
      } 
    }
  `
})
.then(response => response.json())
.then(data => {
  console.log('Here is the data: ', data);
  ...
});

任何想法我做错了什么?是否可以使我与fetch请求一起传递的正文属性的格式Text与我在 PostMan 请求正文中指定的一样?

4

1 回答 1

24

正文应该有一个query属性,包含查询字符串。也可以传递另一个variable属性,以提交查询的 GraphQL 变量。

这应该适用于您的情况:

const url = `http://localhost:3000/graphql`;
const query = `
  {
    users(name: "Thomas") { 
      firstName
      lastName 
    } 
  }
 `

return fetch(url, { 
  method: 'POST',
  Header: {
     'Content-Type': 'application/graphql'
  }
  body: query
})
.then(response => response.json())
.then(data => {
  console.log('Here is the data: ', data);
  ...
});

这是提交 GraphQL 变量的方法:

const query = `
  query movies($first: Int!) {
    allMovies(first: $first) {
      title
    }
  }
`

const variables = {
  first: 3
}

return fetch('https://api.graph.cool/simple/v1/cixos23120m0n0173veiiwrjr', {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({query, variables})
})
.then(response => response.json())
.then(data => {
  return data
})
.catch((e) => {
  console.log(e)
})

在 GitHub 上创建了一个完整的示例

于 2017-06-18T12:49:27.787 回答