Javascript 如何处理前端的标准误差对象?
我有一个有很多API请求的前端应用程序,但是处理错误响应是一件痛苦的事情 有时我需要遍历许多嵌套对象,如: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
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。