Vue封装axios以及使用

    科技2024-07-19  65

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

    为什么选择axios

    在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http 请求支持 Promise API拦截请求和响应转换请求和响应数据

    axiox请求方式

    axios(config)axios.request(config)axios.get(url[, config])axios.delete(url[, config])axios.head(url[, config])axios.post(url[, data[, config]])axios.put(url[, data[, config]])axios.patch(url[, data[, config]])

    ddd, 开始咯!

    在src下新建一个 network 文件夹:(网络模块 放网络请求)在network文件夹里面创建三个文件

    config.js 请求方法的管理 core.js 参数的封装 index.js 入口文件

    config.js:

    export const GET="get"; export const POST="post"; export const path ={ list:'要拼接的url路径' };

    core.js:

    import axios from 'axios'; import {GET, POST, path} from './config'; import {Loading, Message} from "element-ui"; //创建一个axios实例 返回一个axios对象 const instance = axios.create({ baseURL: 'https://api.ys.cc', //发送请求时会在url前面拼接 baseURL // timeout: 5000, //设置axios为form-data headers: {'Content-Type': 'application/x-www-form-urlencoded'}, transformRequest: [function (data) { let ret = ''; for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }] }); // 创建loading实例 var loading = null; // 添加请求拦截器 instance.interceptors.request.use(function (config) { loading = Loading.service({ lock: true, text: 'Loading', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.5)' }); // config.headers = {DeviceType: 'H5'}; return config; }, function (error) { // 对请求错误做些什么 Message(error); console.log("========>", error); return Promise.reject(error); }); // 添加响应拦截器 instance.interceptors.response.use(function (response) { // 对响应数据做点什么 setTimeout(() => { loading.close(); }, 2000); return response; }, function (error) { // 对响应错误做点什么 Message(error); console.log("========>", error); return Promise.reject(error); }); //抛出 request 方法 接收三个参数 1.请求方式 2.请求路径 3.传递的参数 export function request(methods, url, params) { switch (methods) { case GET: return get(url, params); //把promise对象 返回 case POST: return post(url, params) } } //get请求 function get(url, params) { //axios请求 返回的是promise对象 有返回值 后续可以直接调用then catch 等方法 return instance.get(url, params) } //post请求 function post(url, params) { return instance.post(url, params) }

    index.js:

    import {GET, POST, path} from './config'; import {request} from './core'; //引入core模块中抛出的request方法 const network = { getList(params) { return request(GET, path.list, params) } }; //抛出network export default network;

    在main.js里 全局配置 network

    import network from './network/index' Vue.prototype.$network=network;

    在Home.vue中使用

    mounted() { //network里有 getList 方法 并需要接收参数 this.$network.getList().then(res => { console.log(res); }).catch(error => { console.log(error); }) }
    Processed: 0.015, SQL: 8