Vue3封装axios

1、安装axios

npm install axios

2、安装qs

npm install qs

3、在根目录下的src里创建创建封装文件request.js放在api文件夹里:src/api/request.js,request.js代码如下

import axios from 'axios';
import QS from 'qs';

const api = axios.create({
    baseURL: 'http://127.0.0.1:1008', // 所有请求的公共地址部分
    timeout: 3000 // 请求超时时间 这里的意思是当请求时间超过5秒还未取得结果时 提示用户请求超时
})



axios.defaults.baseURL = 'http://127.0.0.1:1008';

axios.interceptors.request.use(
    config => {
        config.headers.token = sessionStorage.getItem('token');
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        if (error.response && error.response.status) {
            switch (error.response.status) {
                case 401:
                	//异常处理
                    break;
                case 403:
                    break;
                case 404:
                    break;
                default:
                    return Promise.reject(error.response);
            }
        }
        return Promise.reject(error);
    }
);

const $get = (url, params) => {
    return new Promise((resolve, reject) => {
        api.get(url, { params })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err);
            });
    });
};

const $post = (url, params) => {
    return new Promise((resolve, reject) => {
        api.post(url, QS.stringify(params), {
            responseType: 'json', // 设置响应类型为json
        }).then(res => {
            resolve(res.data);
        })
            .catch(err => {
                reject(err);
            });
    });
};

export default {
    install: (app) => {
        app.config.globalProperties.$get = $get;
        app.config.globalProperties.$post = $post;
        app.config.globalProperties.$axios = axios;
    }
};

4、在main.js引入,代码如下:

import './assets/main.css'

import { createApp } from 'vue'
import http from './api/request' //这一段
import App from './App.vue'

const app = createApp(App)

app.use(http) //还有这一段

app.mount('#app')

5、在使用的组件里使用方法如下:

methods: {
    test() {
      this.$post('/ksai/chat/getchatlist', { data: 'example' }).then(data => {
        console.log(data); // 在这里处理返回的数据
      }).catch(error => {
        console.error(error); // 在这里处理错误
      })
    }
  }

这样就大功告成啦!!!

你可能感兴趣的:(vue3,axios,封装axios)