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

诗林  金牌会员 | 2024-6-20 19:22:21 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 720|帖子 720|积分 2160

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前言:

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

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

文件路径:/CMDB/src/utils/request.js
  1. import axios from 'axios';
  2. const defaultConfig = {
  3.   timeout: 5 * 1000,
  4.   baseURL:'/api'  // 注意!! 这里是全局统一加上了 '/api' 前缀,也就是说所有接口都会加上'/api'前缀在,页面里面写接口的时候就不要加 '/api'了,否则会出现2个'/api',类似 '/api/api/user'这样的报错,切记!!
  5. };
  6. const instance = axios.create(Object.assign({}, defaultConfig));
  7. instance.interceptors.request.use(
  8.   function (config) {
  9.     ...
  10.     return config;
  11.   },
  12.   function (error) {
  13.     return Promise.reject(error);
  14.   }
  15. );
  16. instance.interceptors.response.use(
  17.   function (response) {
  18.     ...
  19.   },
  20.   function (error) {
  21.     ...
  22.     return Promise.reject(error);
  23.   }
  24. );
  25. export default instance;
复制代码


代理的时间有两个前缀,根据前缀代理到差别的服务器 (我这里是vite的配置)
  1. server: {
  2.   host: '0.0.0.0',
  3.   //tip: when change this, you may need to change src/config either.
  4.   proxy: {
  5.     '/api': {
  6.       // http://192.168.31.53:5173/
  7.       target: 'http://192.168.31.199:18777/',
  8.       changeOrigin: true,
  9.       rewrite: path => path.replace(/^\/api/, '')
  10.     },
  11.     '/app': {
  12.       target: 'http://125.124.5.117:12877/',
  13.       changeOrigin: true
  14.     }
  15.   }
  16. }
复制代码




二、第一种:请求的时间传入参数覆盖默认的baseUrl

  1. import request from '@/src/utils/request.js'
  2. // 获取IP列表 (这个会默认用前缀 '/api')
  3. export const getList = data => {
  4.   return request({
  5.     url: '/ipv6/list',
  6.     method: 'post',
  7.     data
  8.   });
  9. };
  10. // 获取IP列表  (手动加另一个前缀 '/app')
  11. export const getList = data => {
  12.   return request({
  13.     url: '/ipNetin/list',
  14.     baseURL: '/app', // 这个 baseURL 会覆盖实例中默认的 baseURL
  15.     method: 'post',
  16.     data
  17.   });
  18. };
复制代码

三、第二种:新封装一个axios实例

文件路径:/CMDB/src/utils/preAppRequest.js
  1. import axios from 'axios';
  2. const defaultConfig = {
  3.   timeout: 5 * 1000,
  4.   baseURL:'/app'
  5. };
  6. const instance = axios.create(Object.assign({}, defaultConfig));
  7. instance.interceptors.request.use(
  8.   function (config) {
  9.     ...
  10.     return config;
  11.   },
  12.   function (error) {
  13.     return Promise.reject(error);
  14.   }
  15. );
  16. instance.interceptors.response.use(
  17.   function (response) {
  18.     ...
  19.   },
  20.   function (error) {
  21.     ...
  22.     return Promise.reject(error);
  23.   }
  24. );
  25. export default instance;
复制代码


需要请求到前缀 /api 的服务器的时间 就引入 request 实例
需要请求到前缀 /app 的服务器的时间 就引入 preAppRequest 实例 如:
  1. import request from '@/src/utils/preAppRequest.js'
  2. // 获取待办列表
  3. export const getList = data => {
  4.   return request({
  5.     url: '/app/vlanNetin/list',
  6.     method: 'post',
  7.     data
  8.   });
  9. };
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表