实现axios配置多个baseURL请求
1. 概述
在前端开发中,我们经常需要与后端进行数据交互。而axios是一个非常常用的HTTP库,用于发送ajax请求。在实际开发中,有时候我们需要同时访问多个不同的后端接口,这时就需要配置多个baseURL,以便于区分不同的接口。
本文将详细介绍如何使用axios配置多个baseURL请求,并提供代码示例和注释来帮助理解。
2. 实现步骤
下面是整个实现过程的步骤表格:
步骤 | 描述 |
---|---|
1 | 创建axios实例 |
2 | 设置拦截器 |
3 | 根据请求URL配置baseURL |
4 | 发送请求 |
接下来,我们将逐步介绍每一步需要做什么,以及使用的代码和注释。
3. 步骤详解
3.1 创建axios实例
首先,我们需要创建一个axios实例,以便于配置多个baseURL。下面是创建axios实例的代码:
// 创建axios实例
const instance = axios.create();
3.2 设置拦截器
拦截器是axios中非常重要的一个概念,它可以在发送请求或接收响应之前进行一些预处理。在设置拦截器的时候,我们可以根据请求的URL来动态配置baseURL。
// 请求拦截器
instance.interceptors.request.use(config => {
// 在发送请求之前根据请求URL配置baseURL
config.baseURL = getBaseURL(config.url);
return config;
}, error => {
return Promise.reject(error);
});
// 响应拦截器
instance.interceptors.response.use(response => {
return response.data;
}, error => {
return Promise.reject(error);
});
上述代码中,我们通过instance.interceptors.request.use
来设置请求拦截器,在发送请求之前根据请求的URL来配置baseURL。另外,通过instance.interceptors.response.use
来设置响应拦截器,用于处理返回的数据。
3.3 根据请求URL配置baseURL
在请求拦截器中,我们可以根据请求的URL来配置baseURL。下面是一个示例函数getBaseURL
,用于根据URL返回对应的baseURL:
function getBaseURL(url) {
// 根据不同的URL返回对应的baseURL
if (url.startsWith('/api1')) {
return '
} else if (url.startsWith('/api2')) {
return '
} else {
return '
}
}
上述代码示例中,我们根据URL的前缀判断应该使用哪个baseURL,可以根据实际情况进行调整。
3.4 发送请求
最后一步是发送请求,这与普通的axios请求并无区别。下面是一个发送请求的代码示例:
// 发送GET请求
instance.get('/api1/getData').then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
// 发送POST请求
instance.post('/api2/postData', { data: 'example' }).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
上述代码示例中,我们通过instance.get
和instance.post
来发送GET和POST请求,并在.then
回调函数中处理返回的数据,在.catch
回调函数中处理请求异常。
4. 完整代码
下面是完整的代码示例:
import axios from 'axios';
// 创建axios实例
const instance = axios.create();
// 请求拦截器
instance.interceptors.request.use(config => {
// 在发送请求之前根据请求URL配置baseURL
config.baseURL = getBaseURL(config.url);
return config;
}, error => {
return Promise.reject(error);
});
// 响应拦截器
instance.interceptors.response.use(response => {
return response.data;
}, error => {
return Promise.reject(error);
});
// 根据请求URL配置baseURL
function getBaseURL(url) {
// 根据不同的URL返回对应的baseURL
if (url.startsWith