axios二次封装(GET,POST,PUT,DELETE)用到 项目里面,直接复制,注意路径问题

文章展示了如何在Vue.js项目中对axios进行封装,包括设置请求和响应拦截器来处理错误,如401和403状态码的特定操作。此外,还导出了get、post、delete和put等HTTP请求方法供其他模块使用。
摘要由CSDN通过智能技术生成
  1. 安装

  2. npm install axios; // 安装axios
  3. 引入

  4. 一般在项目的src目录中,新建一个utils文件夹,然后在里面新建一个http.js文件,http.js文件用来封装我们的axios,

  5. /*这里是http.js*/
    
    /**
     * axios封装
     * 请求拦截、响应拦截、错误统一处理
     */
    import axios from 'axios';
    import router from '../router';
    // import { Message } from 'element-ui'
    // import store from '../store/index';
    
    /** 
     * 提示函数 
     * 禁止点击蒙层、显示一秒后关闭
     */
    
    /** 
     * 跳转登录页
     * 携带当前页面路由,以期在登录页面完成登录后返回当前页面
     */
    const toLogin = () => {
        router.replace({
            path: '/login',
            query: {
                redirect: router.currentRoute.fullPath
            }
        });
    }
    
    /** 
     * 请求失败后的错误统一处理 
     * @param {Number} status 请求失败的状态码
     */
    const errorHandle = (status, other) => {
        // 状态码判断
        switch (status) {
            // 401: 未登录状态,跳转登录页
            case 401:
                toLogin();
                break;
                // 403 token过期
                // 清除token并跳转登录页
            case 403:
                localStorage.removeItem('token');
                // store.commit('loginSuccess', null);
                setTimeout(() => {
                    toLogin();
                }, 1000);
                break;
                // 404请求不存在
            case 404:
                break;
            default:
                console.log(other);
        }
    }
    
    // 创建axios实例
    var instance = axios.create({ timeout: 1000 * 12 });
    // 设置post请求头
    instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    /** 
     * 请求拦截器 
     * 每次请求前,如果存在token则在请求头中携带token 
     */
    // instance.interceptors.request.use(
    //     config => {
    //         // 登录流程控制中,根据本地是否存在token判断用户的登录情况        
    //         // 但是即使token存在,也有可能token是过期的,所以在每次的请求头中携带token        
    //         // 后台根据携带的token判断用户的登录情况,并返回给我们对应的状态码        
    //         // 而后我们可以在响应拦截器中,根据状态码进行一些统一的操作。        
    //         // const token = store.state.token;
    //         token && (config.headers.Authorization = token);
    //         return config;
    //     },
    //     error => Promise.error(error))
    
    // 响应拦截器
    instance.interceptors.response.use(
        // 请求成功
        res => res.status === 200 ? Promise.resolve(res) : Promise.reject(res),
        // 请求失败
        error => {
            const { response } = error;
            if (response) {
                // 请求已发出,但是不在2xx的范围 
                errorHandle(response.status, response.data.message);
                return Promise.reject(response);
            } else {
                // 处理断网的情况
                // eg:请求超时或断网时,更新state的network状态
                // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
                // 关于断网组件中的刷新重新获取数据,会在断网组件中说明
                // store.commit('changeNetwork', false);
            }
        });
    export function get(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, { params }).then(res => {
                // resolve(res.data)
                resolve(res.data)
            }).catch(err => {
                if (!err.response) {
                    // Message({
                    //     showClose: true,
                    //     message: 'get请求错误',
                    //     type: 'error'
                    // })
                    // console.log(err);
                } else {
                    reject(err.data)
                }
            })
        })
    }
    export function post(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, params)
                .then(response => {
                    resolve(response)
                }, err => {
                    reject(err)
                })
                .catch((error) => {
                    reject(error)
                })
        })
    }
    
    export function deletes(url, params) {
        return new Promise((resolve, reject) => {
            axios.delete(url, params).then(res => {
                resolve(res.data)
            }).catch(err => {
                reject(err.data)
            })
        })
    }
    
    export function put(url, params) {
        return new Promise((resolve, reject) => {
            axios.put(url, params).then(res => {
                resolve(res.data)
            }).catch(err => {
                reject(err.data)
            })
        })
    }
    
    
    export default {
        instance,
        get,
        post,
        deletes,
        put
    };

  6. 然后.在utils文件夹下 建一个api.js,放每个具体的请求方法

  7. /*这里是api.js*/
    
    import { get,post,put,deletes } from '@/utils/http.js'
    
    const base = {
        // sq: 'http://localhost:9666' // 服务的地址
        // sq: 'http://www.bjzykjygt.com:807'//配置服务地址 237
        sq: 'http://www.bjzykjygt.com:6005'//配置服务地址 237
    }
    
    let api = base.sq
    // 
    export const listData = (params) => {
        return get(api + '/cockpit/listData', params)
    }

  8. 在main.js中

  9. //封装的Api组件 把组件导出
    import apiFun from "@/utils/api.js";
    Vue.prototype.$apiFun = apiFun; //设置全局请求接口api

  10. 在vue页面中使用方法

  11.      this.$apiFun.listData(params).then((res) => {
            if (res.code == 200) {
             console.log(res)
            }
          });

 

Vue通常使用Axios作为Http库来发送HTTP请求。下面是一个通用的Axios封装,可以用于发送get、put、postdelete请求。 首先,我们需要在项目中安装Axios依赖。可以使用npm或yarn命令来安装: ``` npm install axios ``` 或者 ``` yarn add axios ``` 然后,我们可以在项目中创建一个utils文件夹,并在其中创建一个http.js文件。在http.js文件中,我们可以编写通用的Axios封装代码: ```javascript import axios from 'axios'; // 创建一个axios实例 const instance = axios.create({ baseURL: 'http://api.example.com' // 设置请求的默认基本URL }); // 请求拦截器,可以在请求发送之前做一些处理,比如添加请求头 instance.interceptors.request.use( config => { // 在请求发送之前添加一个Authorization请求头(如果需要) config.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token'); return config; }, error => { return Promise.reject(error); } ); // 响应拦截器,可以在请求返回之后做一些处理,比如处理错误信息 instance.interceptors.response.use( response => { // 在请求成功返回之后处理响应数据 return response; }, error => { // 在请求失败返回之后处理错误信息 return Promise.reject(error.response.data); } ); // 封装get请求 export const get = (url, params) => { return instance.get(url, { params }); }; // 封装put请求 export const put = (url, data) => { return instance.put(url, data); }; // 封装post请求 export const post = (url, data) => { return instance.post(url, data); }; // 封装delete请求 export const del = url => { return instance.delete(url); }; ``` 以上是一个简单的对Axios进行封装的例子。你可以根据自己的项目需求进行相应的修改和扩展。在组件中使用get、put、postdelete方法来发送不同类型的请求。示例代码如下: ```javascript import { get, put, post, del } from '@/utils/http'; // 使用get请求 get('/api/users').then(response => { console.log(response.data); }).catch(error => { console.error(error); }); // 使用put请求 put('/api/user/1', { name: 'John', age: 30 }).then(response => { console.log(response.data); }).catch(error => { console.error(error); }); // 使用post请求 post('/api/user', { name: 'John', age: 30 }).then(response => { console.log(response.data); }).catch(error => { console.error(error); }); // 使用delete请求 del('/api/user/1').then(response => { console.log(response.data); }).catch(error => { console.error(error); }); ``` 以上就是一个通用的Axios封装,可以用于发送get、put、postdelete请求。通过这种封装,可以简化和统一项目中的HTTP请求处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值