在对Github API的获取请求中从POST读取结果的问题

时间:2018-04-16 11:01:17

标签: javascript reactjs fetch github-api

我正在使用fetch api来获取从github api返回的访问令牌。

当我查看网络标签时,我发现该标记已退回,但我无法在fetch请求中访问该标记。

我的代码如下所示:

fetch(`https://github.com/login/oauth/access_token?client_id=***&client_secret=***&code=${code}&redirect_uri=http://localhost:3000/&state=react`, {
    method: 'POST',
    mode: 'no-cors',
    headers: new Headers({
      'Content-Type': 'application/json'
    })
  }).then(function(res) {
    console.log(res); // I have already tried return res.json() here
  })

如果我返回res.json()

,控制台会显示以下错误
  

index.js:30 Uncaught(在promise中)SyntaxError:意外的输入结束

GitHub docs表示响应采用以下格式:

  

默认情况下,响应采用以下形式:

     

access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer

我想它不会返回有效的json而只是一个字符串,所以我不知道如何访问这个响应。

响应如下:

enter image description here

然而,当我尝试注销回复时,我得到SyntaxError: Unexpected end of input

2 个答案:

答案 0 :(得分:1)

如果您使用mode: 'no-cors,浏览器将限制访问正文。浏览器具有跨域安全性。如果您想访问正文,则必须在没有mode: 'no-cors属性的情况下调用。

https://developer.mozilla.org/en-US/docs/Web/API/Request/mode

这将有效

fetch(`https://jsonplaceholder.typicode.com/posts/1`, {
  method: 'GET',
  headers: new Headers({
    'Content-Type': 'application/json'
  })
})
.then(res => res.json())
.then(function(res) {
  console.log(res);
})

这不起作用

fetch(`https://jsonplaceholder.typicode.com/posts/1`, {
  method: 'GET',
  mode: 'no-cors',
  headers: new Headers({
    'Content-Type': 'application/json'
  })
})
.then(res => res.json())
.then(function(res) {
  console.log(res);
})

答案 1 :(得分:0)

我想你差不多了。您已经向文档提到了this link。如果您进一步阅读,您可以看到要在JSON中获得响应,您需要包含名为Accept的标头,其值为application/json

fetch(` ... `, {
    method: 'POST',
    mode: 'no-cors',
    headers: new Headers({
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    })
  }).then(function(res) {
    ...
  })

这样,您可以在.json()上应用res