当前位置: 首页 > news >正文

vue2项目中,多个固定的请求域名 和 通过url动态获取到的ip域名 封装 axios

vue2 使用场景:项目中,有固定的请求域名,而有某些接口是其他域名

@/utils/request.js 固定请求域名

import axios from 'axios'
import Vue from 'vue'

let baseURL = ''
switch (window.location.hostname) {
  case 'localhost': // 本地
  case '127.0.0.1':
  case '172.25.112.0':
    baseURL = 'https://csapi.test/'
    break
  case 'www.kaifa.top': // 开发(网址)
    baseURL = 'https://kfapi.test.top/'
    break
  case 'www.ceshi.top': // 测试(网址)
    baseURL = 'https://csapi.test.top/'
    break
  case 'www.zhengshi.cn': // 正式(网址)
    baseURL = 'https://api.zheng.cn/'
    break
}

const service = axios.create({
  baseURL,
  timeout: 180000
})

service.interceptors.response.use(
  response => {
    return response
  }
)


Vue.prototype.$http = service

export default baseURL

@/utils/request_ip.js 设置动态请求域名

import axios from 'axios';
import Vue from 'vue'
import { getHashParam } from '@/utils/tool'; 
// 获取ip的值      url链接?后面携带的参数  ?id=12&ip=172.21.999.50:8000


// 从 URL 参数中获取域名
const getBaseURL = () => {
  const myParam = getHashParam('ip');
  let ip;
  // 如果 :变成了%3A  则替换 %3A 为 冒号
  if(myParam.search('%3A')){
    ip = myParam.replace(/%3A/g, ':');
  }else{
    ip = myParam;
  }
  // 如果没有端口号,添加默认端口号
  if (!ip.includes(':')) ip += ':8000'

  if (ip) {
    return `http://${ip}/`;
  }
  // 默认回退到当前域名
  // const { protocol, hostname, port } = window.location;
  // return `${protocol}//${hostname}${port ? `:${port}` : ''}`;
};

console.log( getBaseURL(),'获取到ip地址')

const instance = axios.create({
  baseURL: getBaseURL(), // 动态获取的域名
  timeout: 180000,
  // headers: {
    // 'Content-Type': 'application/json',
  // }
});

instance.interceptors.response.use(
  response => {
    return response
  }
)

Vue.prototype.$http_ip = instance


@/utils/tool.js 获取 url链接 携带的参数

export function getHashParam(param) {
    const hash = window.location.hash.substring(1); // 移除开头的'#'
    const params = hash.split('&').reduce((acc, curr) => {
        const [key, value] = curr.split('=');
        acc[key] = value;
        return acc;
    }, {});
    return params[param] ? decodeURIComponent(params[param]) : null;
}

在 main.js 文件中 引入

import '@/utils/request'
import '@/utils/request_ip'

在vue页面中使用 @/view/index.vue

methods:{
 // 固定的请求域名 示例   this.$http
 getYishuKaoshiList() {
   let data = {
     page: 1
   }
   this.$http.post('getList', data).then(res => {
     if (res.data.code == 1) {}
   });
 },
	// 动态获取到的ip域名  请求接口 示例   this.$http_ip
   dongFn(item) {
     let data = {
         project_id:1
     }
     this.$http_ip.post('decrypt',data).then(res => {
         if (res.data.code == 1) {
             this.$Message.success('成功');
         }else{
           this.$Message.error(res.data.msg);
         }
     });
   },


}
http://www.dtcms.com/a/113397.html

相关文章:

  • [leetcode]1786. 从第一个节点出发到最后一个节点的受限路径数(Dijkstra+记忆化搜索/dp)
  • 私有部署stable-diffusion-webui
  • 44. 评论日记
  • STP学习
  • 【LeetCode】大厂面试算法真题回忆(48)--静态扫描最优成本
  • 为 IDEA 设置管理员权限
  • MYSQL 存储引擎 和 日志
  • 论文阅读笔记:Denoising Diffusion Implicit Models (5)
  • 英伟达Blackwell架构深度拆解:新一代GPU如何突破算力瓶颈?
  • DHCP Snooping 主要作用
  • 【Redis】通用命令
  • 聊聊Spring AI的ChromaVectorStore
  • #SVA语法滴水穿石# (007)关于 $past 的用法
  • P10587 「ALFR Round 2」C 小 Y 的数 Solution
  • Python 如何高效实现 PDF 内容差异对比
  • 房地产之后:探寻可持续扩张的产业与 GDP 新思
  • 在线编辑数学公式
  • NDK开发:音视频处理基础
  • 解释观察者模式,如何实现观察者模式?
  • 单域名 vs 通配符:如何选择最适合你的 SSL 证书?
  • API 类别 - 方法重载
  • JVM虚拟机篇(五):深入理解Java类加载器与类加载机制
  • 纯css实现环形进度条
  • React 零基础学习计划(10节课小项目)
  • STM32定时器通道1-4(CH1-CH4)的引脚映射关系
  • 信创国产化项目验收的标准与流程
  • HBase的安装与简单操作
  • 14.1linux中platform设备驱动实验(知识点)_csdn
  • 关于Linux系统安装和优化的教程
  • Three.js 系列专题 1:入门与基础