Javascript 如何处理前端的标准误差对象?

Javascript 如何处理前端的标准误差对象?,javascript,api,error-handling,Javascript,Api,Error Handling,我有一个有很多API请求的前端应用程序,但是处理错误响应是一件痛苦的事情 有时我需要遍历许多嵌套对象,如:error.response.data.email,有时则是error.response.data.address.province[0] 我无法预测所有的错误,对我来说,编写手动“解析器”似乎是一个肮脏的额外解决方案: const errorsObject = err.response.data let errors = '' Object.keys(errorsObje

我有一个有很多API请求的前端应用程序,但是处理错误响应是一件痛苦的事情

有时我需要遍历许多嵌套对象,如:
error.response.data.email
,有时则是
error.response.data.address.province[0]

我无法预测所有的错误,对我来说,编写手动“解析器”似乎是一个肮脏的额外解决方案:

const errorsObject = err.response.data
    let errors = ''

    Object.keys(errorsObject).map(key => {
      if (key === 'address') {
        Object.keys(errorsObject.address).map(
          key => (errors += `${key} : ${errorsObject.address[key]}\n`)
        )
      } else {
        errors += `${key} : ${errorsObject[key]}\n`
      }
      return undefined
    })

    yield toast.error(errors)
而且它还没有涵盖一切


有前端解析器吗?如果不是,我们的后端是Python(Django),也许有一个后端包?理想情况下,我希望看到一个对象的平面数组
{title,message}

您的错误对象是格式良好的,并且从前端角度分析错误的基本思想是正确的

我在您的错误响应中看到的唯一问题是嵌套和水合作用

如果您希望得到水合响应,您应该向解析器提供正确检索数据的功能,并最终将其映射到前端UI

通常,我给表单提供一个对象,通常称为errors,在这个对象中,我可以通过字段名安全地检索与字段相关的错误

如果你做得“正确”,试着处理对象类型而不是对象特定的键(比如“地址”)

这是我经常使用的错误解析器的一个示例。当发生非常深的嵌套或需要进行数组解析时,我通常会更新解析器以获取错误,并获得从UI检索错误的能力,例如,在字段下显示错误,用红色边框显示错误,等等:

从“lodash”导入; 导出常量getErrors=(错误)=>{ const validationErrors=u.get(errors,'data.validation_messages')?errors.data.validation_messages:{}; //迭代对象键 _.forOwn(验证错误,(值,键)=>{ //简单错误:{key:{errorKey:value}}-嵌套错误{key:{nestedErrorKey:{errorKey:value} const data=validationErrors[key][Object.key(validationErrors[key])[0]]; //检查键的内容既不是null也不是object(嵌套验证) if(validationErrors[key]!==null&&typeof数据!=='object'){ validationErrors[key]=\值(值)[0]; }否则如果(validationErrors[key]!==null&&typeof data==='object'){//TODO:递归方法? //转换嵌套值,使obj:{nestedKey:nestedvalue}成为obj_nestedKey:nestedvalue _.forOwn(validationErrors[key],(nestedValue,nestedKey)=>{ validationErrors[`${key}}{nestedKey}`]=\.values(nestedValue)[0]; }); } }); 返回验证错误; }; 导出默认getErrors;
在我以前的项目中,每个错误都会有一个错误代码出现在响应中,在前端,每个错误代码都会映射到错误消息,这非常容易提供多区域错误消息。如果你能控制API并添加一个键作为错误代码,你可以尝试一下。

谢谢你理解我的挣扎!我想虽然有一些常见的做法,甚至是现成的解决方案,但似乎我仍然需要解析东西。这在很大程度上取决于API最终达到的标准(我的通常是HAL),但核心概念是在前端执行操作,而不涉及后端响应。当您在API标准上与解析器一起工作足够长的时间时,您就可以解析在此基础上生成的任何API。