zoukankan      html  css  js  c++  java
  • 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脚本来进行改造

      

    知道、想到、做到、得到
  • 相关阅读:
    pm2部署node应用
    koa源码分析
    将vim配置成一个轻量的IDE开发工具
    私有npm下载资源
    nodejs的会话总结
    redis---安全设置
    Lua----注意事项
    Leetcode538.-Convert BST to Greater Tree-Easy
    Leetcode 230-Kth Smallest Element in a BST-Medium
    Leetcode669-Trim a Binary Search Tree-Easy
  • 原文地址:https://www.cnblogs.com/Durant0420/p/15144478.html
Copyright © 2011-2022 走看看