Vue|提示信息统一处理
一、前言
在我们进行使用Vue进行开发的时候,有两种异常提示信息是需要我们处理的,一种是把业务异常信息显示出来,另外一种是把系统异常信息给显示出来
二、环境准备
安装element-ui的依赖
npm i element-ui -S
改造前的http.js脚本
import axios from 'axios' var api = process.env.API var instance = axios.create({ headers: { 'content-Type': 'application/json' }, baseURL: 'http://stuq.ceshiren.com:8089', timeout: 100000 }) instance.interceptors.request.use( config => { if (localStorage.getItem('token')) { config.headers.common['token'] = localStorage.getItem('token') } return config } ) export default instance
三、业务异常提示信息(业务异常)
1、场景描述:
使用账号和错误的密码登录系统,后端接口返回了提示信息,如下
{"resultCode":0,"message":"用户不存在或密码错误","data":null}
2、第一次改造后的http.js
import axios from 'axios' import {Message} from 'element-ui' var api = process.env.API var instance = axios.create({ headers:{ 'Content-Type':'application/json', }, baseURL:api }) instance.interceptors.request.use(config=>{ if(localStorage.getItem('token')){ config.headers.common['token'] = localStorage.getItem('token') } return config }) instance.interceptors.response.use(res=>{ if(res.data.resultCode==1){ return Promise.resolve(res); }else{ Message({ type: 'error', message: res.data.message, center: true }) return Promise.reject(res); } }) export default instance
3、效果
备注:但是这样会带来一个问题,连续点击会有多个提示
4、二次改造后的http.js
import axios from 'axios' import {Message} from 'element-ui' var mesIns = null var api = process.env.API var instance = axios.create({ headers:{ 'Content-Type':'application/json', }, baseURL:api }) instance.interceptors.request.use(config=>{ if(localStorage.getItem('token')){ config.headers.common['token'] = localStorage.getItem('token') } return config }) instance.interceptors.response.use(res=>{ if(res.data.resultCode==1){ return Promise.resolve(res); }else{ //如果页面已经存在提示信息,则先关闭,再显示 if(mesIns){ mesIns.close() } mesIns = Message({ type: 'error', message: res.data.message, center: true }) return Promise.reject(res); } }) export default instance
5、效果
备注:连续点击时,提示信息还是只有一个
四、系统异常提示信息处理(响应异常)
1、场景描述:
后台服务不可用,在重启状态中
2、改造后的http.js
import axios from 'axios' import {Message} from 'element-ui' import router from '../router' var mesIns = null var api = process.env.API var instance = axios.create({ headers:{ 'Content-Type':'application/json', }, baseURL:api }) instance.interceptors.request.use(config=>{ if(localStorage.getItem('token')){ config.headers.common['token'] = localStorage.getItem('token') } return config }) instance.interceptors.response.use(res=>{ if(res.data.resultCode==1){ return Promise.resolve(res); }else{ //如果页面已经存在提示信息,则先关闭,再显示 if(mesIns){ mesIns.close() } mesIns = Message({ type: 'error', message: res.data.message, center: true }) return Promise.reject(res); } }, error=>{ const {response} = error if(response.status == 401){ //如果页面已经存在提示信息,则先关闭,再显示 if(mesIns){ mesIns.close() } mesIns = Message({ type: 'error', message: response.data.message, center: true }) router.replace({ path:'/', query:{ redirect: router.currentRoute.fullPath } }) } return Promise.reject(response) }) export default instance
3、效果
备注:会重定向到登录页面,并且提示:用户未登录
五、总结
Vue在处理业务异常和响应异常时,可以使用element-ui的message提示框来处理,并且是在统一的http.js脚本来进行改造
知道、想到、做到、得到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)