axios 多个baseURL配置、实现不同前缀代理到不同的服务器的几种方式

前言:

在开发中,有可能遇到每部分的功能的需要调用另一台服务器的地址。这个时候就需要设置不同的请求前缀首先代理到不同的服务器地址。

一、axios封装实例以及代理:(不是完整的封装实例,重点在于baseURL的区别)

文件路径:/CMDB/src/utils/request.js

javascript 复制代码
import axios from 'axios';


const defaultConfig = {
  timeout: 5 * 1000,
  baseURL:'/api'  // 注意!! 这里是全局统一加上了 '/api' 前缀,也就是说所有接口都会加上'/api'前缀在,页面里面写接口的时候就不要加 '/api'了,否则会出现2个'/api',类似 '/api/api/user'这样的报错,切记!!
};

const instance = axios.create(Object.assign({}, defaultConfig));

instance.interceptors.request.use(
  function (config) {
    ...
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
instance.interceptors.response.use(
  function (response) {
    ...
  },
  function (error) {
    ...
    return Promise.reject(error);
  }
);
export default instance;

代理的时候有两个前缀,根据前缀代理到不同的服务器 (我这里是vite的配置)

javascript 复制代码
server: {
  host: '0.0.0.0',
  //tip: when change this, you may need to change src/config either.
  proxy: {
    '/api': {
      // http://192.168.31.53:5173/
      target: 'http://192.168.31.199:18777/',
      changeOrigin: true,
      rewrite: path => path.replace(/^\/api/, '')
    },
    '/app': {
      target: 'http://125.124.5.117:12877/',
      changeOrigin: true
    }
  }
}
二、第一种:请求的时候传入参数覆盖默认的baseUrl
javascript 复制代码
import request from '@/src/utils/request.js'

// 获取IP列表 (这个会默认用前缀 '/api')
export const getList = data => {
  return request({
    url: '/ipv6/list',
    method: 'post',
    data
  });
};


// 获取IP列表  (手动加另一个前缀 '/app')
export const getList = data => {
  return request({
    url: '/ipNetin/list',
    baseURL: '/app', // 这个 baseURL 会覆盖实例中默认的 baseURL
    method: 'post',
    data
  });
};
三、第二种:新封装一个axios实例

文件路径:/CMDB/src/utils/preAppRequest.js

javascript 复制代码
import axios from 'axios';


const defaultConfig = {
  timeout: 5 * 1000,
  baseURL:'/app' 
};

const instance = axios.create(Object.assign({}, defaultConfig));

instance.interceptors.request.use(
  function (config) {
    ...
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
instance.interceptors.response.use(
  function (response) {
    ...
  },
  function (error) {
    ...
    return Promise.reject(error);
  }
);
export default instance;

需要请求到前缀 /api 的服务器的时候 就引入 request 实例

需要请求到前缀 /app 的服务器的时候 就引入 preAppRequest 实例 如:

javascript 复制代码
import request from '@/src/utils/preAppRequest.js'

// 获取待办列表
export const getList = data => {
  return request({
    url: '/app/vlanNetin/list',
    method: 'post',
    data
  });
};
相关推荐
1024肥宅9 分钟前
手写 EventEmitter:深入理解发布订阅模式
前端·javascript·eventbus
EveryPossible1 小时前
google搜索框
vue.js
Shingmc31 小时前
【Linux】进程控制
linux·服务器·算法
海市公约1 小时前
HTML网页开发从入门到精通:从标签到表单的完整指南
前端·ide·vscode·程序人生·架构·前端框架·html
3秒一个大2 小时前
HTML5 与 JavaScript 中的二进制数据处理:ArrayBuffer 与 TextEncoder/Decoder 实践
javascript
Web极客码2 小时前
如何通过命令行工具检查 Linux 版本信息
linux·运维·服务器
purpleseashell_Lili2 小时前
如何学习 AG-UI 和 CopilotKit
javascript·typescript·react
行云流水6262 小时前
前端树形结构实现勾选,半勾选,取消勾选。
前端·算法
diudiu_332 小时前
web漏洞--认证缺陷
java·前端·网络
远程软件小帮手2 小时前
云电脑挂机功能上线!边上班摸鱼边游戏多开教程
运维·服务器