簡體   English   中英

在轉換為json之前反應本機訪存api檢查http狀態

[英]react native fetch api check http status before converting to json

下面的代碼正在發出ajax請求並獲取數據。 如您所見, then((response) => response.json())將響應轉換為json。 但是,如果http狀態未經授權或其他原因(400、401等)並且未返回json數據,該怎么辦。 在將響應轉換為json之前,還有什么更好的方法來檢查狀態代碼嗎?

我想catch是我可以執行此操作的地方,但是,我想保留未處理異常的catch。 基於狀態代碼,我想顯示用戶收到的確切錯誤(出於安全原因,當然不用於登錄組件)。 例如,無效的授權,無效的令牌。

我的提取代碼如下所示:

onLoginPressed() {

    fetch('http://localhost:8080/api/user/login', {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            username: this.state.username,
            password: this.state.password
        })
    }).then((response) => response.json())
        .then((responseJson) => {

            if (responseJson.status === 500) {
                Alert.alert(responseJson.message);
            } else if(responseJson.profileCompleted == false){
                this.props.navigation.navigate('SetupOne');
            } else {
                this.props.navigation.navigate('Home');
            }

        }).catch((error) => {
        console.error(error);
    });
}

如果您查看fetch的文檔,則會看到以下內容:

即使響應是HTTP 404或500,從fetch()返回的Promise也不會拒絕HTTP錯誤狀態。相反,它將正常解析(ok狀態設置為false),並且僅在網絡故障或失敗時拒絕。如果有任何事情阻止了請求的完成。

再往下走:

准確檢查成功的fetch()包括檢查已解決的諾言,然后檢查Response.ok屬性的值為true。

因此,換句話說,如果這與您有關,則可能需要先進行狀態檢查,然后再進行json主體轉換。 類似於以下內容:

const handleResponse = res => {
  if(res.ok) {
    return res.json()
  }
  throw new Error('Network response was not ok.')
}

fetch(someUrl, details)
  .then(handleResponse)      
  .then(doYourWorkWithJSON)
  .catch(err => console.error(err))

暫無
暫無

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

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