zoukankan      html  css  js  c++  java
  • axios拦截设置和错误处理

    目前想出的处理接口请求进行全局错误提示 的最佳方案,axios整体配置如下

    1.基于axiso.interceptors进行响应拦截: 主要负责全局提示错误

    axios.interceptors.request.use(
    	config => {
    		config.timeout = 30000;
    		return config;
    	},
    	err => {
    		return Promise.reject(err);
    	}
    )
    axios.interceptors.response.use(
    	response => {
    		// 根据后端约定,response.data形式为{success:boolean, message:string, content:any}
    		if (response.data.success) {
    			return response.data
    		} else {
    			iView.Notice.error({
    				title: '错误',
    				desc: response.data.message
    			})
    			Promise.reject(response.data.message)
    		}
    	},
    	error => {
    		if (error.response) {
    			if (error.response.status === 401) {
    				// 这种情况一般调到登录页
    			} else if (error.response.status === 403) {
    				// 提示无权限等
    			} else {
    				// 其他错误处理
    			}
    		}
    		return Promise.reject(error.response.data)
    	}
    )
    

    2. 封装axios方法(比如get)

    主要负责将所有的结果(包括错误)都通过reslove来处理,这样下一级直接then就可以得到所有的结果,而且使用await语法使,不需要try..catch...

    	axiosGet: (url, config, showLoading = true) => {
    		if (showLoading) {
    			return new Promise((resolve, reject) => {
    				iView.LoadingBar.start()
    				axios.get(url, config)
    					.then(data => {
    						resolve(data)
    						iView.LoadingBar.finish()
    					}).catch((error) => {
    						resolve()
    						iView.LoadingBar.error()
    					})
    			})
    		} else {
    			return new Promise((resolve, reject) => {
    				axios.get(url, config)
    					.then(data => {
    						resolve(data)
    					}).catch((error) => {
    						resolve()
    					})
    			})
    		}
    	}
    
    

    3. 封装一个接口:

    export default {
        getList: (config) => getService(`/api/getList`, config)
    }
    
    

    4. main.js注册:

    import service from '@/service'
    Vue.prototype.$service = service
    

    5.调用接口

        async getList() {
          // 1.使用await
          // 第2步封装axios方法时,对于错误情况,即catch内:resolve();
          // 所以这里不需要try···catch···来使用await;这里如果res不为空,说明是正确接收数据的情况
          this.loading = true;
          let res = await this.$service.getList({
            pageNum: this.page.current,
            pageSize: this.page.size
          });
          this.loading = false;
          if (res) {
            // 此种情况说明请求成功
          } else {
            // 请求错误的情况,一般不需要特殊处理,因为已经在全局设置了错误提示
          }
        },
        
        getList2() {
          // 2.使用then
          // 第2步封装axios方法时,对于错误情况,即catch内:resolve();
          // 所以这里then可以接收到正确和错误的结果,不需要再使用catch接受错误情况;这里如果res不为空,说明是正确接收数据的情况
          this.loading = true;
          this.$service
            .getList({
              pageNum: this.page.current,
              pageSize: this.page.size
            })
            .then(res => {
              this.loading = false;
              if (res) {
                // 此种情况说明请求成功
              } else {
                // 请求错误的情况,一般不需要特殊处理,因为已经在全局设置了错误提示
              }
            });
        }
    
  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/XHappyness/p/11429526.html
Copyright © 2011-2022 走看看