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
  });
};
相关推荐
蓝胖的四次元口袋4 小时前
服务器网络与系统基础-面试题
服务器·网络
钛态5 小时前
前端安全防线:CSRF 攻击链路与双重 Token 校验的工程实现
前端·vue·react·web
Cx330❀5 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
aduzhe5 小时前
关于lib文件格式(keil/unix)
服务器·unix
银河麒麟操作系统6 小时前
闸机高效稳跑,通勤提速升级!银河麒麟赋能北京轨交新基建
运维·服务器·安全·交通物流
张拭心6 小时前
技术管理笔记:让我“燃尽”的一天
前端
蜡台6 小时前
Linux Python 安装使用
linux·运维·服务器
欧神附体1236 小时前
在虚拟机中添加网卡,修改网卡名并关闭SElinux
linux·服务器·网络
不好听6137 小时前
BFF 架构实战:从前端直调 API 到加入中间层
前端·架构
不好听6137 小时前
前端跨域完全指南:从为什么报错到三种解决方案
前端