Axios错误处理程序消息,在react中包含codec/await

irlmq6kh  于 2023-10-18  发布在  iOS
关注(0)|答案(2)|浏览(96)

我的应用程序从react向nestjs服务器请求axios,代码在这里。

const loginEvent = async (id, password) => {
    try {
      const res = await (await axios.post('users/login', { id, password })).data;
      if (res.success) {
         ...
      } else {
         ...
      }
    } catch (err) {
      console.log('Login Err ', err);
    }
  };

在《 Postman 》中,我可以恰当地看到信息和成功。

{
    "success": false,
    "statusCode": 400,
    "timestamp": "2022-05-17T11:50:16.676Z",
    "path": "/users/login",
    "message": [
        "id should not be empty"
    ],
    "error": "Bad Request"
}

但是,React中只显示简短的错误消息。

POST http://localhost:3000/users/login 400 (Bad Request)
Login Err  Error: Request failed with status code 400
    at createError (createError.js:16:1)
    at settle (settle.js:17:1)
    at XMLHttpRequest.onloadend (xhr.js:66:1)

当请求中出现错误时,服务器会发送一个已处理的消息,并且success = false,但是在axios的响应中,没有发现任何一个使用了soc/wait。
如果我不使用basec/wait,我可以在axios.post.then.catch()中检查这两个,但是我想使用basec/wait来使代码更干净。我该怎么办?

ulydmbyx

ulydmbyx1#

如果服务器发送数组消息,您应该能够在错误中的响应对象中获取它们,如下所示:

async function loginEvent() {
  try {
    const res = await (await axios.post('users/login')).data
    // your code
  } catch (e: any) {
if(e.response != undefined) {
   const statusCode = e.response.status // 400
   const statusText = e.response.statusText // Bad Request
   // whereby errorMessage is the error message returned by your server
   // Example of an error message 'Incorrect username or pwd'
   return {success: false, message:e.response.data.errorMessage}
}
return {success:false, message:'Action failed on platform because of ' + e.message}
    
  }
}
mgdq6dx1

mgdq6dx12#

如果服务器发送数组消息,您应该能够在错误中的响应对象中获取它们,如下所示:

async function loginEvent() {
  try {
    const res = await (await axios.post('users/login')).data
    // your code
  } catch (e: any) {
if(e.response != undefined) {
   const statusCode = e.response.status // 400
   const statusText = e.response.statusText // Bad Request
   // whereby errorMessage is the error message returned by your server
   // Example of an error message 'Incorrect username or pwd'
   return {success: false, message:e.response.data.errorMessage}
}
return {success:false, message:'Action failed on platform because of ' + e.message}

  }
}

相关问题