如何实现动态请求地址(baseURL)
需求: 在项目中遇到了需要实时更换请求地址,后续使用修改后的请求地址(IP)
例如:原ip请求为'http://192.168.1.1:80/xxx',现在需要你点击或其他操作将其修改为'http://192.168.1.2:80/xxx',该如何操作
tips: 修改后需要跳转( 修改了IP之前的不可使用,需要访问修改后的地址来操作 )
思路: 通过重新创建axios实例来重新生成对应配置
具体思路可参考方案1代码中注释
具体方案如下,一共3种:
方案1:可用
通过当前浏览器的 location 来直接生成对应baseURL,代码如下
// 需要重新赋值,因此不使用const
let Sever = ''
// 需要在指定操作时,重新生成,因此封装为函数的方式,并利用export导出
export const changeIP = () => {let url = ''// 利用 origin 直接读取当前的ip地址if (location.origin) {url = location.origin// 下列 else是因为部分浏览器可能不支持origin,因此做代码稳健处理} else if (location.port) { // 判断post是否有端口// 有端口则进行拼接url = `${location.protocol}//${location.hostname}:${location.port}`} else {// 无端口则默认端口url = `${location.protocol}//${location.hostname}`}Sever = axios.create({baseURL: url,// 其他配置可自行配置withCredentials: true,})
}
// 初次加载调用
changeIP()// 后续可使用请求拦截器(Sever.interceptors.request.use)
// 响应拦截器(Sever.interceptors.response.use)
方案2:可用
通过函数传参的方式,重新调用生成,代码如下:
// 为拦截器预留函数
import { requestFn } from '../utils/request.js'// 初始地址
let BaseUrl = 'http://192.168.1.xxx:xxx/'
let AllUrl = BaseUrl
// 通过调用getSerApiUrl时,传入参数进行拼接等操作,具体看项目需求
export const getSerApiUrl = (Val) => {AllUrl = BaseUrl + Val// 使用动态urlUrlFn(AllUrl)
}let Sever = ''
const UrlFn = (url) => {Sever = axios.create({baseURL: url,timeout: 3000,withCredentials: true,})
}
// 自调用使用初始url
UrlFn(BaseUrl)// request.js
// 把创建好的axios实例以参数的形式传过来
export const requestFn = (Sever) => {// 请求拦截器// 响应拦截器
}
方案3:不可用 (有坑)
通过 localStorage 的存储机制,进行修改,思路与方案1类似,
问题点: 当通过 localStorage 修改IP进行跳转后,此时请求中的IP地址为修改前的IP,查看浏览器中的存储时,确实修改过来了,刷新页面后可使用修改后的IP进行请求
具体代码如下:
let Sever = ''
export const changeIP = () => {Sever = axios.create({// 预期在此处重新调用时,已经重新生成实例并可使用baseURL: localStorage.getItem('ip'),withCredentials: true,})
}
changeIP()// 具体使用时调用如下
// 预期效果:
// 1. 通过 localStorage.setItem 来设置新的请求地址
// 2. 调用changeIP函数,来重新创建axios实例,从而使用新的请求地址
localStorage.setItem('ip', ip)
changeIP()
解决方案1:
经排查发现并非受异步影响( 即不存在在调用时修改的localStorage,在changeIP函数中读取不到的问题 ) ===> 未解决
解决方案2:
在跳转页面后新增强制刷新操作( 即location.reload() ),跳转后未能达到预期效果 ===> 未解决
最终推断问题原因:
在切换IP后,不同域名存储的数据不互通,跳转到修改后的IP地址时,此时读取到的为修改前的IP地址
经测试,跳转至同一域名情况下,此时的IP请求中的值为修改后的值(即达到预期效果)
但是在实际的操作中,无法真正解决此问题,有懂的大佬可以指点一二
相关文章:
如何实现动态请求地址(baseURL)
需求: 在项目中遇到了需要实时更换请求地址,后续使用修改后的请求地址(IP) 例如:原ip请求为http://192.168.1.1:80/xxx,现在需要你点击或其他操作将其修改为http://192.168.1.2:80/xxx,该如何操作 tips: 修改后需要跳转( 修改了IP之前的不可使用,需要访问修改后的地址来操作 …...
封装一个搜索区域 SearchForm.vue组件
父组件 <template><div><SearchForm:form-items"searchItems":initial-values"initialValues"search"handleSearch"reset"handleReset"><!-- 自定义插槽内容 --><template #custom-slot"{ form }&qu…...
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读
《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力:问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…...
Day56 | 99. 恢复二叉搜索树、103. 二叉树的锯齿形层序遍历、109. 有序链表转换二叉搜索树、113. 路径总和 II
99. 恢复二叉搜索树 题目链接:99. 恢复二叉搜索树 - 力扣(LeetCode) 题目难度:中等 代码: class Solution {public void recoverTree(TreeNode root) {List<TreeNode> listnew ArrayList<>();dfs(root,…...
GPT - GPT(Generative Pre-trained Transformer)模型框架
本节代码主要为实现了一个简化版的 GPT(Generative Pre-trained Transformer)模型。GPT 是一种基于 Transformer 架构的语言生成模型,主要用于生成自然语言文本。 1. 模型结构 初始化部分 class GPT(nn.Module):def __init__(self, vocab…...
前端加密的几种方式
前端加密的几种方式 一、对称加密原理常用算法代码示例(AES)适用场景 二、非对称加密原理常用算法代码示例(RSA)适用场景 三、哈希函数原理常用算法代码示例(SHA-256)适用场景 四、Base64 编码原…...
贪心算法:部分背包问题深度解析
简介: 该Java代码基于贪心算法实现了分数背包问题的求解,核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序,按wm(价值/重量比)从高到低重新排列物品;随后分两阶段装入:循环…...
连接器电镀层的作用与性能
连接器电镀层的作用与性能: 镀金 金具有很高的化学稳定性,只溶于王水,不溶于其它酸,金镀层耐蚀性强,导电性好,易于焊接,耐高温,硬金具有一定的耐磨性。 对钢、铜、银及其合金基体而…...
神经网络如何表示数据
神经网络是如何工作的?这是一个让新手和专家都感到困惑的问题。麻省理工学院计算机科学和人工智能实验室(CSAIL)的一个团队表示,理解这些表示,以及它们如何为神经网络从数据中学习的方式提供信息,对于提高深…...
【双指针】和为 s 的两个数字(easy)
和为 s 的两个数字(easy) 题⽬描述:解法⼀(暴⼒解法,会超时):解法⼆(双指针 - 对撞指针):算法思路:C 算法代码Java 算法代码: 题⽬链接…...
.net core 工作流介绍
WikeFlow2.0介绍 WikeFlow官网:http://www.wikesoft.com WikeFlow学习版演示地址:http://workflow.wikesoft.com WikeFlow学习版源代码下载:WorkFlow: 多数据库支持,同时支持:SQLServer,Mysql࿰…...
nginx自编译重现gzip和chunked的现象
前言 最近做项目,发现一个比较好玩的事,nginx的module gzip模式默认支持1KB压缩,和chunked返回,本来现在的很多框架都很完善了,但是,一些新语言框架或者一些老旧框架会不能完整支持chunked,导致…...
jspm企业采购管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 相比于以前的传统企业采购手工管理方式,智能化的管理方式可以大幅降低企业采购管理的运营人员成本,实现了企业采购管理的标准化、制度化、程序化的管理,有效地防止了物资信息、物资入库、出库等的随意管理,提高了信息的处理…...
iOS应用开发指南
开发一款iOS应用是一个系统化的过程,涵盖从环境搭建、界面设计、编码实现到测试发布的各个环节。以下是一份面向初学者的iOS移动应用开发指南,帮助你从零开始构建自己的App。 一、准备工作:开发环境与工具 必备设备 Mac电脑:iO…...
Go之defer关键字:优雅的资源管理与执行控制
在Go语言中,defer关键字是处理资源释放、错误恢复和代码逻辑清理的利器。它看似简单,却隐藏着许多设计哲学和底层机制。本文将深入剖析defer的执行原理、使用场景和常见陷阱,助你掌握这一关键特性。 一、defer基础:延迟执行的本质…...
现代测试自动化框架教程:Behave接口测试与Airtest移动端UI自动化
前言 我发现每天还是陆陆续续有人在看我之前写的自动化框架搭建的文档;即使很早就有新的框架,更好的选择出来了;所以特别写了这一篇目前大厂也在使用的;日活400w有实际落地的自动化测试架构方案; 随着测试技术…...
优化运营、降低成本、提高服务质量的智慧物流开源了
智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...
使用Lombok的@Slf4j和idea构建:找不到log符号-解决
问题:在使用Lombok的Slf4j构建项目时提示如下内容: MvcConfiguration.java:26:9 java: cannot find symbol symbol: variable log location: class cn.edu.wynu.mrcinerec.mrserver.config.WebMvcConfiguration查了网上的方法都是改配置 但是使用Googl…...
陕化之光(原创)
当城市在和周公化合 陕化的工装已与朝霞发生反应 工人先锋号已然吹响 陕化工人游走在工作的床层 钢铁森林间穿梭的身影 是沉默的催化剂 让冰冷的方程式 绽放出最活跃的分子温度 扳手与阀门对话时 塔林正在记录 关于电流与压力的学习笔记 每一次精确的调控 都是舞台上…...
redis 内存中放哪些数据?
在 Java 开发中,Redis 作为高性能内存数据库,通常用于存储高频访问、低延迟要求、短期有效或需要原子操作的数据。以下是 Redis 内存中常见的数据类型及对应的使用场景,适合面试回答: 1. 缓存数据(高频访问,降低数据库压力) 用户会话(Session):存储用户登录状态、临时…...
【Python爬虫】简单案例介绍1
目录 三、Python爬虫的简单案例 3.1 网页分析 单页 三、Python爬虫的简单案例 本节以科普中国网站为例。 3.1 网页分析 单页 在运用 Python 进行爬虫开发时,一套严谨且有序的流程是确保数据获取高效、准确的关键。首先,深入分析单个页面的页面结构…...
LLM-as-Judge真的更偏好AI输出?
论文标题 Do LLM Evaluators Prefer Themselves for a Reason? 论文地址 https://arxiv.org/pdf/2504.03846 代码地址 https://github.com/wlchen0206/llm-sp 作者背景 弗吉尼亚大学,乔治华盛顿大学 实践建议 在将LLM部署为评估器之前,应严格评…...
【软考-架构】13.3、架构复用-DSSA-ABSD
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 1、软件架构复用2、特定领域软件架构DSSADSSA的三个基本活动参与DSSA的四种角色人员建立DSSA的过程三层次模型 考试真题第一题第二题 3、基于架构的软件开发ABSD的软件开发…...
色温插值计算借鉴
色温插值计算方法借鉴: 摘至:Understanding the in-camera rendering pipeline & the role of AI and deep learning...
git合并分支原理
Git合并的原理是基于三方合并(three-way merge)算法,它通过比较三个快照来合并不同分支上的更改。这三个快照包括两个要合并的分支的最新提交和它们的共同祖先提交。合并过程并不是简单地按照提交时间来进行,而是通过比较这些快照…...
SnailJob:分布式环境设计的任务调度与重试平台!
背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…...
网络安全-Http\Https协议和Bp抓包
1. http协议,有请求必有相应, 请求协议, 响应协议; 2. 密码学加密机制及常用算法和常用名称说明: 算法 密钥 明文数据 密文; 加密算法分类和常用算法: 加密算法可以归结为三大类ÿ…...
爱普生FC1610AN5G手机中替代传统晶振的理想之选
在 5G 技术引领的通信新时代,手机性能面临前所未有的挑战与机遇。从高速数据传输到多任务高效处理,从长时间续航到紧凑轻薄设计,每一项提升都离不开内部精密组件的协同优化。晶振,作为为手机各系统提供稳定时钟信号的关键元件&…...
质粒已被全面解析
随着微生物研究的不断深入和耐药性问题的日益加剧,了解质粒对开发抗菌策略及生物技术应用意义重大。但现有质粒数据库缺乏细致注释并且工具存在不足。近期,香港城市大学李帅成课题组在Nucleic Acids Research期刊发表研究成果,推出全面注释质…...
实验二.单按键控制LED
1.实验任务 如图4.1所示:在P0.0端口上接一个发光二极管L1,按键按一下灯亮,在按一下灯灭。 2.电路原理图 3.系统板上硬件连线 把“单片机系统”区域中的P0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容...
