内网工程 前后端分离,根据内网IP实时更新缓存的请求接口IP

725 阅读2分钟

场景叙述

近些时日有个好兄弟委托我帮他部署了一个系统(基于Windows7),该系统(以下简称A系统)为工厂内部使用,后端用的PHP(fastadmin框架),前端用的uni ,不能连公网,厂区内每个部门需要单独部署一套A系统 ,每个部门的内部的专员,通过自己部门的电脑内网访问系统 。也就是说 ,10个部门需要部署十次,而且如果没配置静态IP ,每次路由器重启后,都要到 unpackage\dist\build\web\static\js 中搜索dev修改为新的IP ,这样不仅麻烦,而且容易出错,而且厂区内没有程序员,操作起来太繁琐了 。 于是我今晚便突发奇想,想通过自动化来解决这个问题。

准备优化

此时可以忽略“部署了几次A系统”这件事了 。 一开始我想的是,在主机本地请求localhost:8092时 , 通过后端返回网卡的IP ,我也搜了百度实现了 , 实践后发现,主机本地缓存的IP没问题,但是其他客户端访问的时候,由于无法共享主机的缓存,第一次请求都是404的,因此本方案失败 。

最终

然后想,既然这样 ,每台机器访问 hostip:8092之后,点击按钮进入设置界面 ,手动保存主机IP ,这样就行了,也确实可行 。但我觉得还是繁琐,又想起之前的经验,js能获取地址栏的值,我想截取一下 应该是可以的 ,于是乎直接开干 :

  完整url 是 hostip:8092/tushu/ 
onShow(option) {
				// 每次页面显示时都会调用
				var url = window.location.href;
				var last = url.lastIndexOf("/tushu/");
				var host = url.substring(0, last);
				console.log(url, host);
				uni.setStorage({
					key: "host",
					data: host,
				})
			},

,这样,只要前端页面能正常打开,就能读取正确的 host:port,直接缓存下来,下次请求接口,就是正确的接口地址了。问题解决,这样不管路由器一天重启几次,只要一个 ipconfig,就搞定 , 给维护系统的工人 节省了时间。