平常捕获报错都是 err.response.data.message
但是请求如下时,通过 err.response.data.message不能获取到报错
downloadFile(params) {
return axios.get('/api/excel', { params, responseType: 'blob' })
}
为防止 返回错误的message无法拦截 所以需要将blob转换为json 解析
downloadFile(this.ruleForm)
.then(res => {
saveBlobFile(res.data, 'test.xlsx')
})
.catch(err => {
if (err.response.data.type === 'application/json') {
const reader = new FileReader()
reader.readAsText(err.response.data)
reader.onload = e => {
const { message } = JSON.parse(reader.result)
this.$message.error(message)
}
} else {
this.$message.error('下载失败')
}
})
参考文章: axios 下载文件请求, responseType为blob时, 无法捕获后端抛出错误问题 - 简书
vue axios下载文件blob,后端返回文件流和错误信息的区分_骑着骆驼去看海的博客-CSDN博客 axios下载文件,reponseType为blob时,处理返回是下载错误信息_qq_40315971的博客-CSDN博客