我在我的VueJS应用程序中使用blob responseType和Axios从服务器下载文档。当响应代码为200时,它工作正常并下载文件,但当出现任何http错误时,我无法读取错误的状态代码,因为错误是JSON响应。
是否有人遇到过类似的问题,找到了将blob响应类型转换为json并根据状态代码抛出错误的方法?
我试过从Laravel后端以纯文本发送响应,并尝试在前端将响应转换为JSON或文本,但没有成功。
我试过阅读错误响应头,但没有运气。
Axios({
url: 'xxxx',
method: 'GET',
responseType: 'blob',
})
.then((response) => {
//code to read the response and create object url with the blob and download the document
})
.catch((error) => {
console.log('Error', error.message); //nothing
console.log('Error', error.error); //undefined
console.log('Error', error.data); //undefined
const blb = new Blob([error], {type: "text/plain"});
const reader = new FileReader();
// This fires after the blob has been read/loaded.
reader.addEventListener('loadend', (e) => {
const text = e.srcElement.result;
console.log(text);
});
// Start reading the blob as text.
reader.readAsText(blb);
});
我只想抛出基于状态码的错误信息,如果是401,只希望它是未授权的,或者其他任何东西,把它扔到组件上。
6条答案
按热度按时间bvk5enib1#
原因是响应类型为blob。
如果出现错误,状态代码可直接在例外对象中使用。但是,响应是一个承诺。
你需要做的是:
有关详细信息,请阅读文档。
jchrr9hc2#
你可以这样做,如果它是一个blob,它会将错误转换为JSON,或者让响应数据保持原样,你可以使用它。
x8diyxa73#
您需要将响应blob转换为json:
更多信息
waxmsbnn4#
我认为您可能在
catch()
中错误地使用了error
变量。Axios传递一个错误对象,该对象具有
response
属性,您将在该属性中查找error
或message
。https://github.com/axios/axios#handling-errors
另一方面,如果您可以捕获服务器端的错误,您可以尝试将
Content-type
标头设置为text/plain
。tvz2xvvm5#
您可以执行以下操作
kx1ctssn6#
您可以全局转换blob响应: