错误处理

错误处理是什么

错误处理是指在项目开发中采取一系列措施来捕捉和处理程序可能出现的异常或错误的方法。它通常包括编写代码来检测和处理预期和非预期的异常情况,从而使程序在出现问题时能够以一种合理的方式进行恢复或终止程序执行。

为什么项目里要进行错误处理

错误处理对于项目非常重要,原因如下:

  • 提高代码质量:错误处理可以使代码更健壮、更可靠、更具有可维护性,从而提高代码质量。
  • 保障系统稳定性:错误处理可以保障系统的稳定性,当系统出现异常或错误时,它可以有效地避免系统崩溃或产生不可预期的结果。
  • 提高用户体验:错误处理可以提高用户体验。当程序出现错误时,可以提供相应的错误信息,告知用户出现了什么问题,从而帮助用户更好地理解程序的运行情况,避免用户的不必要的疑惑和不满。
  • 方便项目维护:错误处理可以方便项目维护。通过对程序中可能出现的异常情况进行处理,可以及时发现并排除错误,从而减少后期的维护成本。
  • 符合编程规范:错误处理是良好编程实践的一部分,它符合编程规范,有利于编写高质量的代码,有助于项目的长期发展和稳定性。

后端服务错误处理

  • 通过throw new BizError() 返回给前端业务错误errorCode
  1. const { errorCode, errorReason } = errorInfoEnum.chat_user_not_exist;
  2. const targetUser = await jianghuKnex(tableEnum._user).where({ userId }).first();
  3. if (!targetUser) {
  4. throw new BizError({ errorCode, errorReason: `${userId} ${errorReason}` });
  5. }
  6. const targetFriend = await jianghuKnex(tableEnum._user).where({ userId: friendId }).first();
  7. if (!targetFriend) {
  8. throw new BizError(errorInfoEnum.chat_user_not_exist);
  9. }

前端错误处理

页面里通过try catch捕获相关error

  1. try {
  2. await window.jianghuAxios({
  3. data: {
  4. appData: {
  5. pageId: 'test',
  6. actionId: 'getInfo',
  7. actionData: {},
  8. where: {},
  9. }
  10. }
  11. })
  12. } catch(err) {
  13. console.log("errorCode:", err.errorCode)
  14. console.log("errorReason:", err.errorReason)
  15. }
  16. // errorCode: resource_service_not_found
  17. // errorReason: 接口不存在

axios返回的是一个Promised对象, Promise对象内部其实自带了try catch,所以我们也可以这样写:

  1. await window.jianghuAxios({
  2. data: {
  3. appData: {
  4. pageId: 'test',
  5. actionId: 'getInfo',
  6. actionData: {},
  7. where: {},
  8. }
  9. }
  10. }).catch(err => {
  11. console.error("errorCode:", err.errorCode)
  12. console.error("errorReason:", err.errorReason)
  13. })
  14. // errorCode: resource_service_not_found
  15. // errorReason: 接口不存在

小结

错误处理是在项目开发中捕捉和处理程序可能出现的异常或错误的方法。它可以提高代码质量、保障系统稳定性、提高用户体验、方便项目维护,符合编程规范。

在后端服务中,可以通过throw new BizError()返回给前端业务错误errorCode。前端可以在页面里通过try catch捕获相关error,也可以使用axios返回的Promise对象自带的try catch处理。

实操练习

  1. 添加一个service resource
  2. 在对应的service抛出业务异常:{ errorCode: ‘test_biz_error’, errorReason: ‘这是一个异常测试’ }
  3. 前端请求这个resource,并确保弹出提示 “这是一个异常测试”