• 封装axios请求拦截器


    在现在的项目中,axios的使用是非常高的,随之而来的各种http请求状态拦截也是必然的操作,所以这里封装了一个基于axios的HTTP请求,并进行全局状态的拦截和状态的信息的返回。

    首先在我们src下建立一个service文件夹,分别建立三个js文件:api.js,http.js,index.js,

      首先将请求的路径进行处理和获取,在api.js中进行处理并暴露该方法:

    const prefix = 'http://xxx:xxxx';
    
    export default(config => {
        return Object.keys(config).reduce((copy, name) => {
            copy[name] = `${prefix}${config[name]}`;
            return copy
        }, {})
    })
    ({
        "_login": "/api/xxx",
        "_getMenus":"/app-auth/auth/visible/menu"
    })
    

      然后再对我们的aiox做一个全局的拦截器,并暴露出去,这一步我们放到http.js中进行处理

    import axios from 'axios'
    
    axios.defaults.timeout = 100000;
    // axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
    axios.interceptors.request.use(config => {
        // console.log(config,'config')
        return config
    });
    
    
    axios.interceptors.response.use(response => {
         // 这里的code根据服务端返回的结构进行获取和配置,具体获取可以打印response查看
        if (response.data.code === 10002 || response.data.code === 10004 || response.data.code === 10001 || response.data.code === 10005 || response.data.code === 0) {
            return response.data
        } else {
            // 非200请求
            throw Error(response.data.msg || '服务异常')
        }
    }, error => {
        console.log(error);
        
    });
    
    export default axios
    

      最后我们在index.js中进行使用:

    import http from './http.js' // 导入我们封装好的axios对象
    import api from './api.js' // 导入我们封装好的api对象
    import qs from 'qs'
    
    export function _getMenus(params={}){
        // console.log(params,'params,菜单id')
        return  http.get(`${api._getMenus}?userId=${params.userId}`, ) // return对应的get/post方法,第一个填路径,第二个给参数对象
    }
    export function _login(params={}){
        // console.log(params,'登陆接口出传入的参数')
        return  http.post(api._login, qs.stringify(params.data)) // return对应的get/post方法,
    }
    

      这样就可以了,最后是我们的如何使用:(此处仅为在react中的示范)

    import {_getMenus} from "./servers/index.js"; // 通过inport 引入暴露的方法
    
    
     _getMenus({传入的参数名称: 参数}).then(data => {
                        if (data.code === 0 && data.data.list) {
                            _this.setState({
                               list:data.list
                            })
                        }
                    }).catch(err => {
                        alert(err)
                    })
    

      

  • 相关阅读:
    数据库设计模式
    PostGreSQL数据库的导入导出
    [webGIS开发]为什么要把空间数据发布成地图服务,不能直接访问空间数据库呢?
    PostGIS三维对象
    数据库之触发器
    飞鸽内网穿透
    Ubuntu服务器上Anaconda新建虚拟环境(激活和取消)以及安装各个依赖包
    Ubuntu服务器上Anaconda新建虚拟环境(激活和取消)以及安装各个依赖包
    你还不会用python画蛋糕???
    在线追番软件
  • 原文地址:https://www.cnblogs.com/yang656/p/12720230.html
Copyright © 2020-2023  润新知