axios请求类型是文件流,但是报错信息的话没法显示,在request.js文件中更改一下request拦截器代码:
service.interceptors.request.use(config => {
......
, error => {
console.log(error, '报错报错')
// 处理请求错误
if (error.response && error.response.data instanceof Blob && error.response.data.type === 'application/json') {
// 如果错误信息是一个 JSON 格式的 Blob,那么读取 Blob 的内容并解析为 JSON 对象
return error.response.data.text().then(text => {
const json = JSON.parse(text);
console.log(json);
// 返回一个包含错误信息的 Promise 对象
return Promise.reject(json);
});
}
// 如果错误信息不是一个 JSON 格式的 Blob,那么返回原始的错误对象
return Promise.reject(error);
// Promise.reject(error)
})
更改响应拦截器:
service.interceptors.response.use(res => {
if (res.data) {
// 判断Bolb类型是否有错误信息 错误信息的话直接弹窗提示
if (
res.data instanceof Blob &&
res.data.type === 'application/json'
) {
let reader = new FileReader()
reader.readAsText(res.data, 'utf-8')
reader.onload = function (e) {
let data = JSON.parse(e.target.result)
if (data.code !== 200) {
MessageBox.confirm(data.data, '文件生成失败', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'error'
}).then(() => {
})
}
}
return Promise.resolve(res)
}
}
// 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
return res.data
}
......
})
完工!