axios.interceptors.response.use(response => Promise.resolve(response), error => { // 这⾥对 error 预期结果是包含具体错误信息和状态码 if (error && error.response && error.response.status) { switch (error.response.status) { case 500:
// do something... break case 404:
// do something... break default:
// do something... break } } })
事与愿违,当服务器发⽣错误时, error 提供的信息永远只有:'Error: Network Error'
跟源码进去,然后发现开发者在注释⾥清楚的解释了为什么,翻译总结就是:balabala…不是我不给你们错误信息,是 TM 浏览器不给我啊balabala
// Handle low level network errors
request.onerror = function handleError() {
// Real errors are hidden from us by the browser // onerror should only fire if it's a network error
reject(createError('Network Error', config, null, request)); // Clean up request request = null;}
不过好消息是,⾃⼰在业务逻辑⾥定义的错误信息是能够获取到的。
⽴刻验证了下,在请求登录验证⽅法⾥返回结果时,像这样添加发送错误状态码:
res.sendStatus(401)
再回头运⾏代码,发送请求,果然 error 拿到了它该有的信息
{ ...
\"response\": {
\"data\": \"Unauthorized\ \"status\": 401,
\"statusText\": \"Unauthorized\ \"headers\": {
\"content-type\": \"text/plain; charset=utf-8\" } }}
仔细思考了⼀下,其实客户端本来就不需要关⼼底层错误。需要处理展⽰给⽤户的只有业务逻辑内发⽣的错误提⽰,譬如登录验证失败、数据编辑操作失败等等。
因篇幅问题不能全部显示,请点此查看更多更全内容