在 Vue 项目中访问多个后端 API(其 IP 和端口不同)可以通过以下步骤实现:

1. 配置代理

使用 Vue CLI 的 vue.config.js 文件配置代理,以解决跨域问题。这种方式适用于开发环境。

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/api1': {
        target: 'http://api1.example.com',
        changeOrigin: true,
        pathRewrite: { '^/api1': '' },
      },
      '/api2': {
        target: 'http://api2.example.com',
        changeOrigin: true,
        pathRewrite: { '^/api2': '' },
      },
      // 你可以添加更多的API代理
    }
  }
}

在这里,我们定义了两个代理 /api1 和 /api2,分别指向不同的后端 API。pathRewrite 用于重写请求路径,以便去掉代理前缀。

2. 配置 axios 实例

在 Vue 项目中,使用 axios 作为 HTTP 客户端,创建多个 axios 实例以访问不同的后端 API。

// src/api/api1.js
import axios from 'axios';
 
const api1 = axios.create({
  baseURL: '/api1',
  timeout: 1000,
  headers: { 'X-Custom-Header': 'foobar' }
});
 
export default api1;
// src/api/api2.js
import axios from 'axios';
 
const api2 = axios.create({
  baseURL: '/api2',
  timeout: 1000,
  headers: { 'X-Custom-Header': 'foobar' }
});
 
export default api2;

3. 使用 axios 实例

在组件中使用这些 axios 实例访问不同的后端 API。

// src/components/ExampleComponent.vue
<template>
  <div>
    <p>Data from API 1: {{ data1 }}</p>
    <p>Data from API 2: {{ data2 }}</p>
  </div>
</template>
 
<script>
import api1 from '@/api/api1';
import api2 from '@/api/api2';
 
export default {
  data() {
    return {
      data1: null,
      data2: null
    };
  },
  methods: {
    async fetchData() {
      try {
        const response1 = await api1.get('/endpoint1');
        const response2 = await api2.get('/endpoint2');
        this.data1 = response1.data;
        this.data2 = response2.data;
      } catch (error) {
        console.error('Error fetching data', error);
      }
    }
  },
  mounted() {
    this.fetchData();
  }
};
</script>

4. 生产环境配置

在生产环境中,你可能需要配置 Nginx 或其他反向代理服务器来处理不同 API 的请求。

server {
    listen 80;
    server_name example.com;
 
    location /api1/ {
        proxy_pass http://api1.example.com/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
 
    location /api2/ {
        proxy_pass http://api2.example.com/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
 
    location / {
        root /path/to/your/vue/app;
        try_files $uri $uri/ /index.html;
    }
}

通过这些配置,你可以在 Vue 项目中访问多个不同的后端 API,解决跨域问题,并保持代码的清晰和可维护性。