如何使用 axios 请求将 422 错误拆分为 field/error?
How to split 422 error into field/error with axios request?
在我的 vuejs3 应用程序中使用 axios 保存数据时,出现 422 验证错误
我尝试捕获它并显示消息哪些字段无效。我尝试读取错误响应对象,
但失败了。我喜欢 :
axios.put(requestUrl, currencyData, credentials).then(({data}) => {
isPageUpdating.value = false
showPopupMessage('Currency Editor', 'Currency updated successfully !', 'success')
router.push({path: '/admin/currencies'})
}).catch((error) => {
if (error.response.status === 422 ) {
console.log('error.response.data:::')
console.log(error.response.data)
console.log('error.response.data.errors:::')
console.log(error.response.data.errors)
console.log(typeof error.response.data.errors)
if (typeof error.response.data.errors === 'object') {
let errorsArray = Object.values(error.response.data.errors)
let errStr = ''
errorsArray.map((errorField, errorKey) => {
console.log('errorField::')
console.log(errorField)
console.log(typeof errorField)
console.log('errorKey::')
console.log(errorKey)
console.log('errorsArray[errorKey]::')
console.log(errorsArray['errorKey'])
})
showPopupMessage('Currency Editor', errStr, 'warn')
}
return
}
})
我试图在上面的 errStr 中获取错误文本,但失败了
我在浏览器的控制台中看到:https://prnt.sc/xyy7ql
"axios": "^0.20.0-0",
"vue": "^3.0.0",
"yup": "^0.29.3"
如何获得无效的 fields/errors 列表作为文本?
谢谢!
看起来您正在尝试从 data.errors
对象
中获取一组值
let errorsArray = Object.values(error.response.data.errors)
和data.errors看起来像:
{
"name": ["error 1", "error 2"]
}
如果您随后尝试遍历 data.errors
的键,它将无法与
一起使用
errorsArray.map((errorField, errorKey) => {}
因为Object.values
returns一个数组,其中key/index是一个数字[0..]
这就是为什么你的 errorKey
是 0;
如果您想要 name
字段中的错误,您可以这样做
let errorsArray = Object.values(error.response.data.errors.name)
但如果键是字段名称...
let errorsKeysArr = Object.keys(error.response.data.errors)
errorsKeysArr.map((key) => {
const errorField = error.response.data.errors[key]
...
})
在我的 vuejs3 应用程序中使用 axios 保存数据时,出现 422 验证错误 我尝试捕获它并显示消息哪些字段无效。我尝试读取错误响应对象, 但失败了。我喜欢 :
axios.put(requestUrl, currencyData, credentials).then(({data}) => {
isPageUpdating.value = false
showPopupMessage('Currency Editor', 'Currency updated successfully !', 'success')
router.push({path: '/admin/currencies'})
}).catch((error) => {
if (error.response.status === 422 ) {
console.log('error.response.data:::')
console.log(error.response.data)
console.log('error.response.data.errors:::')
console.log(error.response.data.errors)
console.log(typeof error.response.data.errors)
if (typeof error.response.data.errors === 'object') {
let errorsArray = Object.values(error.response.data.errors)
let errStr = ''
errorsArray.map((errorField, errorKey) => {
console.log('errorField::')
console.log(errorField)
console.log(typeof errorField)
console.log('errorKey::')
console.log(errorKey)
console.log('errorsArray[errorKey]::')
console.log(errorsArray['errorKey'])
})
showPopupMessage('Currency Editor', errStr, 'warn')
}
return
}
})
我试图在上面的 errStr 中获取错误文本,但失败了 我在浏览器的控制台中看到:https://prnt.sc/xyy7ql
"axios": "^0.20.0-0",
"vue": "^3.0.0",
"yup": "^0.29.3"
如何获得无效的 fields/errors 列表作为文本?
谢谢!
看起来您正在尝试从 data.errors
对象
let errorsArray = Object.values(error.response.data.errors)
和data.errors看起来像:
{
"name": ["error 1", "error 2"]
}
如果您随后尝试遍历 data.errors
的键,它将无法与
errorsArray.map((errorField, errorKey) => {}
因为Object.values
returns一个数组,其中key/index是一个数字[0..]
这就是为什么你的 errorKey
是 0;
如果您想要 name
字段中的错误,您可以这样做
let errorsArray = Object.values(error.response.data.errors.name)
但如果键是字段名称...
let errorsKeysArr = Object.keys(error.response.data.errors)
errorsKeysArr.map((key) => {
const errorField = error.response.data.errors[key]
...
})