Bootstrap

vue3中封装axios请求

  1. 首先在vue项目中引入axios包,在控制台输入以下命令

npm install axios --save

  1. 在src文件夹下创建axios文件夹,然后我们就要开始封装axios了
  2. 在创建好的axios文件夹下创建http.js文件,主要封装就在本文件,也可以在本文件中设置请求头或者拦截器,代码如下:
//引入axios
import axios from 'axios';
//引入elementplus消息提示组件
import { ElMessage } from 'element-plus'
import router from '../router/index.js'
axios.defaults.baseURL ="";

// axios.defaults.timeout = 5000;

// axios.interceptors.request.use(
//     config => {
//         config.headers['UserId'] = 23;  //将UserId设置成请求头
//       return config;
//     },
//     err => {
//       return Promise.reject(err);
//     }
//   );
  
//http request 拦截器
// axios.interceptors.request.use(
//   config => {
//     // const token = getCookie('名称');注意使用的时候需要引入cookie方法,推荐js-cookie
//     config.data = JSON.stringify(config.data);
//     if(config.url.substring(config.url.length-5)!='login'){
//         if(sessionStorage.getItem('token') == ''){

//         }else{
//             // config.params = {'token':sessionStorage.getItem('token')}
//             config.headers['TOKEN'] = sessionStorage.getItem('token')
//         }
//     }
    
//     return config;
//   },
//   error => {
//     return Promise.reject(err);
//   }
// );
// //http response 拦截器
// axios.interceptors.response.use(
//   response => {
//     if(response.data.token_status != 1){
//         router.push({
//             path:"/login",
//             query:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
//         })
//         if(response.data.message == "登录信息已失效"){
//             ElMessage({
//                 showClose: true,
//                 message: '您好!登录信息已过期!请重新进行登录!',
//                 type: 'warning',
//             })
//         }
//     }
//   //   if(response.data.errCode ==2){
//   //     router.push({
//   //       path:"/login",
//   //       query:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
//   //     })
//   //   }
//     return response;
//   },
//   error => {
//     return Promise.reject(error)
//   }
// )
// const api = axios.create({
//     baseURL:''
// })
//开始封装请求
const http = {
    get: function(url,params) {
        return new Promise((resolve, reject) => {
            axios.get(url,{params:params}).then(res => {
                resolve(res.data);
            }).catch(err => {
                reject(err);
            })
        })
    },
    post: function(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, params)
                .then(res => {
                    resolve(res.data);
                })
                .catch(err => {
                    reject(err.data)
                })
        });
    },
    put:function(url, params) {
        return new Promise((resolve, reject) => {
            axios.put(url, params)
                .then(res => {
                    resolve(res.data);
                })
                .catch(err => {
                    reject(err.data)
                })
        });
    },
    delete:function(url, params){
        return new Promise((resolve, reject) => {
            axios.delete(url, {data:params}).then(res => {
                resolve(res.data);
            }).catch(err => {
                reject(err);
            })
        })
    }
}
//导出
export default http;
  1. 创建好http.js文件后,在axios文件夹下再创建sell.js文件,代码如下:
//导入http.js
import axios from "./http"
//服务器url
const server = "http://192.168.0.102:8080"
//用于webscoket
const ws = "192.168.0.102:8080"
//封装请求
const goods = {
//get请求示例
getHttp() {
    return axios.get(server + `/users/user`);
},
//post请求示例
postHttp(data) {
    return axios.post(server + `/users/login`, data);
},
//put请求示例,路径拼接id,带修改data,data位于请求body里
DataUpdate(id, data) {
    return axios.put(server + `/data_source/${id}` data);
},
//delete请求示例,路径拼接id
DataDelete(id) {
    return axios.delete(server + `/data_source/${id}`);
},
//也可以单纯是url拼接接口
url() {
    return server + `/model_item/upload_model_file`
},
//webscoket请求
WsScript() {
    return `ws://${ws}/ws/exec_code`
}
}
//导出
export default goods;
  1. 创建好sell.js文件后,在axios文件夹下再创建最后一个文件api.js,代码如下:
//导入sell文件
import sell from "./sell"
const http={
    sells:sell
}
//导出
export default http;
  1. 完成以上步骤后就可以在项目中使用了,以下是使用示例:
<script lang="ts" setup>
//导入我们封装的axios
import http from "../../axios/api";

//创建请求方法,以下是无参数get请求,如果是其他带参数的请求在括号中加入对应参数就可以了
const getHttp = () => {
    http.sells.getHttp()
    	.then((data) => {
       	 	console.log(data)
    	})
        .catch((e) => {
            console.log(e)
        });
}
</script>

封装后可以统一管理请求,避免因url的改变引起麻烦。

;