【axios封装】面对多个baseurl 如何封装请求方法 多个服务器请求地址

一般情况下,我们在项目中全局设置了请求地址。

比如 vue 中,在.env.development文件中可以设置:

# just a flag
ENV = 'development'

# base api
VUE_APP_BASE_API = 'http://192.168.0.0:9999' // 服务地址

这样开发时,全局在axios中封装直接设置baseUrl也很方便,比如在 封装axios时候,可以这样:

...

// 设置一下就可以了,注意这里是全局设置了服务地址
axios.defaults.baseURL = process.env.VUE_APP_BASE_API


...

但是后台开发为了自己后台功能模块的区分(有时候可能就是为了自己方便,就是太懒),会提供很多地址,比如

// 接口1

http:192.168.0.1:9090/api/xxxxxx

// 接口2

http:192.168.0.5:8888/api/xxxxxx

// 接口3

http:192.168.0.1233:4444/api/xxxxxx

看到这一幕的话,作为前端开发真的奔溃了。沟通之后,后台各种理由说不能改正。没办法,这个坑,注定由前端来填。

【解决方案】

既然baseurl都不一样,那么索性在封装axios的时候,就不用设置baseurl了。

...

// 设置一下就可以了,注意这里是全局设置了服务地址

// 不设置baseurl
// axios.defaults.baseURL = process.env.VUE_APP_BASE_API


...

然后新建一个文件,我这里叫作baseUrlConfig.js,用来管理所有可能出现的baseUrl地址。比如

// baseURlConfig.js

export baseUrls = {
    base1: 'http://192.168.1.1:1111',
    base2: 'http://192.168.2.1:2222',
    base3: 'http://192.168.3.1:3333',
    base4: 'http://192.168.4.1:4444',
    base5: 'http://192.168.5.1:5555',


    ..... 
};

然后在具体的接口使用的时候,引入对应的baseurl即可,比如:

// 比如是一个请求list的接口,用到的是一个 base2 这个服务地址




// 引入封装好的axios
import axios from '@request'

// 引入baseUrlConfig
import {baseUrl} from '@/request/baseUrlConfig';

// 看看用哪一个baseUrl base2 这个服务地址
const base2 = baseUrl.base2;

// 开始接口封装了
export const getList = params => {
    return axios.post(`${base2}/api/getList`)
} 

暂时这么处理吧。