前言:
在开发中,有可能遇到每部分的功能的需要调用另一台服务器的地址。这个时候就需要设置不同的请求前缀首先代理到不同的服务器地址。
一、axios封装实例以及代理:(不是完整的封装实例,重点在于baseURL的区别)
文件路径:/CMDB/src/utils/request.js
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的配置)
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
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
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 实例 如:
import request from '@/src/utils/preAppRequest.js'// 获取待办列表export const getList = data => { return request({ url: '/app/vlanNetin/list', method: 'post', data });};