javascript - 为什么请求 API 时总是出现错误而去 catch

标签 javascript reactjs react-native axios

我对从服务器请求 API 有一些疑问。我为请求API做了一个函数,这个例子我有一个请求API登录,当用户填写错误的电子邮件时,响应API是“电子邮件或密码错误!”,当我在 postman 中尝试时,响应是成功的,但是当我尝试时我的代码的响应始终来自 catch,而不是来自响应 API。我的请求 API 代码如下

 const handleSubmitLogin = async (input) => {
    try {
      const result = await axios.post(`${BASE_URL}/users/client/login`, input);
      if (result.status == 200 || result.status === "success" || result.status == 201) {
        await setAuthKey(result.data.data.token);

        await setLoggedUser(JSON.stringify(result.data.data));

        dispatch(setUserLogin());
        dispatch(setDataLogin(result.data.data));
      } else {
        setModalActive({ status: true, data: result.message });
      }
    } catch (error) {
      console.log(error);
      setModalActive({ status: true, data: translations["please.try.again"] });
    }
  };

当用户填写错误的电子邮件或密码时,响应始终来自 catch 响应,而不是来自 API 响应。有人可以对这个案例提出建议吗?

编辑: 这是由于用户密码错误造成的 enter image description here

最佳答案

如果您的 API 以不成功的状态代码 (>= 400) 进行响应,Axios 将拒绝该 Promise,并且您的代码将进入 catch block 。

您仍然可以通过error.response.data访问响应数据。请参阅Axios - Handling Errors

try {
  const result = await axios.post(`${BASE_URL}/users/client/login`, input);

  // etc...
} catch (err) {
  console.warn("login", error.toJSON());
  setModalActive({
    status: true,
    data: error.response?.data?.message ?? translations["please.try.again"],
  });
}

使用 optional chaining 很重要因为错误可能没有响应或数据,具体取决于具体失败的原因。

关于javascript - 为什么请求 API 时总是出现错误而去 catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73017199/

相关文章:

javascript - 当控制台记录某些内容时是否会触发事件?

javascript - 如何在新页面加载时执行脚本

javascript - 路由在 AngularJS 中不起作用

reactjs - 在 React 中将输入字段的值传递给父组件

javascript - 无法添加属性_tracking,对象不可扩展

javascript - 在 JavaScript 函数中将 CSS id 作为参数传递

javascript - 在旧浏览器上使用 Fetch 的 ReactJS

javascript - 如何将 td 插入数组 es6 Reactjs

react-native - react 原生 map : Custom Markers cause extreme lag and slow down on android

reactjs - React Navigation "focus"事件监听器不使用更新值