簡體   English   中英

在Github API的提取請求中從POST讀取結果的問題

[英]issue with reading result from POST in fetch request to 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未捕獲(承諾)語法錯誤:輸入意外結束

GitHub文檔指出響應采用以下格式:

默認情況下,響應采用以下形式:

access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer

我猜它不是返回有效的json而是一個字符串,所以我不確定如何訪問此響應。

響應如下所示:

在此處輸入圖片說明

但是,當我嘗試注銷響應時,出現SyntaxError: Unexpected end of input

如果您使用mode: 'no-cors ,瀏覽器將限制訪問主體。 瀏覽器具有跨域安全性。 如果要訪問正文,則必須在沒有mode: 'no-cors情況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);
})

我想你快到了。 您已經提到了指向文檔的鏈接 如果您進一步閱讀,可以看到要在JSON中獲得響應,您需要包含一個名為Accept的標頭,其值為application/json

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

這樣,您可以在res上應用.json()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM