首页 > 解决方案 > 如何在本机反应中在获取 POST 请求中抛出 Catch

问题描述

当我在 React Native 中调用 POST 请求时,我遇到了调用错误的问题,我知道有一个问题,但它只会抛出网络连接,当我有一个从响应中得到的错误时,我该怎么做错误的密码或错误的用户名,例如从响应中调用此错误时:

Object {
  "error": "invalid_request",
  "error_description": "Missing form parameter: grant_type",
}
    fetch("https://websiteo.com/auth/realms/realmsid/protocol/openid-connect/token", {
      method: 'POST',
      headers: myHeaders,
      body: urlencoded.toString(),
    })
      .then(response => response.json())
      .then(result => {
        //console.log(result)
        console.log(result)
        saveToken('secure_access_token', `${result.access_token}`)
        props.navigation.navigate('HomeApp') //i need to throw catch also when username or password wrong
      })
      .catch(error => alert(error.response.data)) //This is only thrown when network problems 

标签: javascriptreactjstypescriptreact-native

解决方案


您可以在响应中验证 json 是否为 200 或失败,如下所示:

fetch("https://websiteo.com/auth/realms/realmsid/protocol/openid-connect/token", {
  method: 'POST',
  headers: myHeaders,
  body: urlencoded.toString(),
})
  .then(response => {
     if (response.ok) {
        return response.json();
     } else {
        throw new Error('Something went wrong');
     }
  })
  .then(result => {
    //console.log(result)
    console.log(result)
    saveToken('secure_access_token', `${result.access_token}`)
    props.navigation.navigate('HomeApp')
  })
  .catch(error => alert(error.response.data)) //This is only thrown when network problems 

推荐阅读