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
  });
};
相关推荐
zzzzzz31032 分钟前
36K stars 之外:如何阅读 react-bits 这样的动画交互式 React 项目
javascript·react.js·动效
ljt272496066134 分钟前
Flutter笔记--envied
前端·笔记·flutter
Flynt1 小时前
React Router v8 升了之后,我花了两天才把项目跑起来
前端·typescript·preact
疯狂打码的少年6 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
泯泷7 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree8 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨8 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢8 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢9 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
IT毕设实战小研9 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计