【问题标题】:"Problems parsing JSON" while sending a http request to a graphql api向 graphql api 发送 http 请求时出现“解析 JSON 的问题”
【发布时间】:2018-01-15 22:23:26
【问题描述】:

我正在尝试向 Githubs graphql api(v4) 发送一个 http 请求。我的猜测是我的查询格式错误。下面的代码用于向 api 发送 POST 请求。

app.get('/fetch-data', function(req, res, next) {
    const access_token = settings.dev.TOKEN;
    const query = {query: { viewer: { 'login': 'muckbuck' } }};

    const options = {
        uri: 'https://api.github.com/graphql',
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Authorization': "Bearer " + access_token,
            'User-Agent': 'request',
            'contentType': "application/graphql",
        },
        data: query
    };

    function callback(error, response, body) {
        console.log(response.body)
        if (!error && response.statusCode == 200) {
            console.log(body);
            console.log('lol');
        }
    }
    request(options, callback);



});

我得到的错误信息:

{"message":"Problems parsing JSON","documentation_url":"https://developer.github.com/v3"}

【问题讨论】:

  • 确定“contentType”?那不应该是“内容类型”吗???
  • 是的,我认为你是对的,但遗憾的是它并没有解决问题。

标签: json node.js http github graphql


【解决方案1】:

我认为您的 GraphQL 格式错误,因为 query 键应该包含一个字符串,而不是一个复杂的结构。另请参阅 GitHub API 文档中的 this example

您可能还想按照GraphQL introduction 的建议将Content-Type 设置为application/jsonapplication/graphql 似乎不是 registered media type,而是 GraphQL 的 alter the behaviour

【讨论】:

  • 谢谢,我将查询更改为:{ "query": "query:{viewer:{login}}" };。我还将 Content-Type 更改为 application/json 但它仍然无法正确解析:/。还有一个关于在链接中转义一些字符的注释,不知道该怎么做,我猜得谷歌它。
  • 试试{ "query": "query { viewer { login } }" }。 GraphQL 不是 JSON。再次检查the example
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2017-04-06
  • 1970-01-01
相关资源
最近更新 更多