2017-09-11 57 views
0

我有一個React JS應用程序試圖登錄到基於令牌的API(我也在開發中,使用Laravel 5.5和Laravel Passport)。我試圖實現基本登錄(使用用戶名和密碼登錄,驗證後從服務器接收令牌,將該令牌用於將來的查詢)。React JS Fetch返回空響應,但郵遞員沒有

我使用獲取的代碼如下:

function loginApi(username, password) { 
    return fetch(loginUrl, { 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify({ 
      grant_type: 'password', 
      client_id: clientId, 
      client_secret: clientSecret, 
      username: username, 
      password: password 
     }) 

    }).then(handleApiErrors) 
    .then(response => response.json) 
} 

值得注意的是不完全完整,因爲我現在只是想確定我恢復的響應。

我已經解決了遇到的正常問題,比如CORS問題,但是現在遇到的問題是API的響應只是...空。即使在Chrome的開發人員工具的「網絡」標籤中,如果我直接檢查請求,響應也是空的。

dev tools 1

dev tools 2

然而,如果我做的確切相同查詢與郵差,結果正是我所期望的。

postman

可能是什麼問題嗎?爲什麼完全相同的查詢會返回不同的結果?

回答

5

.json是一個函數,需要調用。試試..

.then(response => response.json()) 

您當前正在返回.json解析函數。

+0

D'oh!謝謝,就是這樣。然而我很好奇:爲什麼調用該函數會改變服務器的響應?對我公認的新到React的思想來說,服務器的響應應該是相同的,不管是不是?唯一的區別是應用程序如何理解它?爲什麼在網絡選項卡中查看響應是空的? – CGriffin

+0

@PeregrineStudios你沒有改變服務器響應。請記住'fetch'現在是一個瀏覽器本地API。您可能正在考慮瀏覽器獲取並返回的AJAX調用,但是如何將其格式化爲您的業務。但通過Fetch,整個承諾鏈都是API調用的一部分。它正確地「調用」了調用(您的服務器日誌應該顯示該調用),但未在開發人員控制檯中顯示,因爲瀏覽器解釋了整個「fetch」調用,而不僅僅是線程請求。 –

相關問題