# 多实例场景实战（不同后端服务）

URL: https://caijiao.org/axios/instance/multiple
Source: docs/axios/instance/multiple.md
Description: 本章节讲解在前端项目中使用 Axios 多实例来管理不同后端服务，包括创建多个独立实例、设置不同 baseURL、请求头和拦截器，实现接口请求的灵活分离与统一管理。

在大型项目中，通常需要调用多个后端服务，例如用户服务、订单服务和支付服务。使用 Axios 多实例可以为每个服务配置独立的 baseURL、请求头和拦截器，方便管理。

## 1. 创建多个 Axios 实例

```javascript
import axios from "axios";

// 用户服务实例
export const userApi = axios.create({
  baseURL: "https://user.example.com/api",
  timeout: 5000,
});

// 订单服务实例
export const orderApi = axios.create({
  baseURL: "https://order.example.com/api",
  timeout: 7000,
});

// 支付服务实例
export const paymentApi = axios.create({
  baseURL: "https://payment.example.com/api",
  timeout: 10000,
});
```

## 2. 为不同实例添加拦截器

```javascript
// 用户服务请求拦截器
userApi.interceptors.request.use((config) => {
  config.headers["Authorization"] = `Bearer ${localStorage.getItem(
    "user_token"
  )}`;
  return config;
});

// 订单服务响应拦截器
orderApi.interceptors.response.use(
  (response) => response.data,
  (error) => Promise.reject(error)
);
```

## 3. 使用多实例发送请求

```javascript
// 获取用户信息
userApi.get("/profile").then((data) => console.log("用户信息：", data));

// 创建订单
orderApi
  .post("/create", { itemId: 123, quantity: 2 })
  .then((data) => console.log("订单创建成功：", data));

// 支付请求
paymentApi
  .post("/pay", { orderId: 456 })
  .then((data) => console.log("支付成功：", data));
```

## 4. 优势

- **独立配置**：每个实例可以有不同 baseURL、timeout、headers；
- **灵活管理**：便于区分不同后端服务的请求逻辑；
- **提高可维护性**：减少全局配置冲突，便于扩展和调试。

---

> 💡 小提示：在多服务项目中使用 Axios 多实例可以让请求逻辑更加清晰、独立，提高项目的可维护性和开发效率。
