9vue中封装axios发送请求

1、直接引入axios发送

一般为了方便或者是刚学习vue时,我们都喜欢这样做。比如,在组件里引入axios再发送。

组件里引入:import axios from 'axios';

直接放在方法里发送:

            axios.get('https://autumnfish.cn/api/joke/').then(response=>{
                console.log(response.data);
            });

这样有个缺点:那就是,如果你的项目有几十个组件都需要发送请求获取数据。那你就要每个组件里引入后写一些重复代码。比如axios的url。你要写重复的,后期维护也不方便,如果改了域名,还有一个个组件进行修改。

2、全局挂载axios并配置基础域名

2.1、在main.js文件里引入axios并配置基础域名和全局挂载

import Vue from 'vue'
import App from './App.vue'

//关闭生产提升
Vue.config.productionTip = false;

import axios from 'axios';

// 设置默认路由前缀
axios.defaults.baseURL='https://autumnfish.cn';

//全局挂载
Vue.prototype.$axios=axios;

new Vue({
  axios,//设置axios的配置项
  render: h => h(App),
}).$mount('#app')

这样在所有组件里都可以直接使用,而且url不用写全

            this.$axios({
                url:'/api/joke/',
            }).then(resopnse=>{
            console.log(resopnse.data);
          });

这样做也不是很好,一个基础域名有时候其实并不够用,而且也不是所有组件都要发送请求。也可以不用全局挂载。

3、单独封装axios

在src目录单独创建一个文件夹utils,在里面创建一个request.js模块,用于封装axios。


import axios from 'axios';

//基本请求1
 function request1(config){//config是请求的配置项,是一个对象,包含url,method
    var  instance1=axios.create({
        baseURL:"https://autumnfish.cn",
        timeout:5000
    });
    //返回Promise对象
    return instance1(config);
}

//基本请求2
function  request2(config){
    const instance2=axios.create({
        baseURL:"http://localhost:8012",
        timeout:5000
    });
    return instance2(config);
};

//统一暴露
 export{ request1,request2};

这样所有组件使用也特别简单,想用哪个基础axios发送就引入哪个

这里全部引入进行测试:
import {request1,request2} from '../utils/request.js';

组件里发送请求

 	request1({
                url:'/api/joke/'
            }).then(r=>{
                console.log(r.data);
            });   
            
            
         request2({
                url:'/Animal.json'
            }).then(r=>{
                console.log(r.data);
            }); 
posted @ 2022-06-29 13:00  青仙  阅读(935)  评论(0编辑  收藏  举报