前端访问服务器地址如何由用户配置

102 阅读3分钟

我与后端通过websocket通信,刚开始后端的服务器地址是写死的,固定地址。但是后面发现部署服务器的时候,地址都不一样,然后我每次都在代码改地址,然后build编译一个版本在发,能不能不要把地址写死,版本不需要频繁出。

首先我考虑到的方法:
1.刚打开也页面就自动获取IP,我也实现了:js自动获取ip地址 ,但是有个问题,浏览器不支持,每次要获取还得该浏览器配置。

2.现在要求可以在外部提供一个文件配置(如D:/test.txt),用户部署的时候,它把服务器ip地址写上,然后打开浏览器读取它,但是一顿搜索实现的时候,浏览器不支持读取本地文件,不然打开网页很容易被读取所有文件。
在这里插入图片描述
当然,使用IE有ActiveXObject这个方法可以支持读取,但是我不用IE浏览器。显然这种方法不适合我。

3.我想到nginx这个反向,但是试了多次,最接近的文章:www.jb51.net/article/112…,但是测试了下,感觉逻辑没有理解,本来nginx反向是别人访问时反向到其他服务,比如 登录192.168.0.1反向到192.168.0.2服务。
在这里插入图片描述
可是我是webscoket是要直接访问服务的,怎么反向到服务,也就是我们在中间。这块我还没有研究懂,有懂得朋友讲解下。

以上我能想到的办法就这三种了,但是都实现不了。

没办法百度也百度不出来,我只能请教几个做前端的大神,问了几个,给了几个思路:

1.浏览器访问不了本地,但是访问自己的配置总是可以,就是在自己项目的文件下,一般放在pubilc下,这样整个项目build后不会压缩和编译它,我们之前讲下载时有讲过,把要下载的文件放在这里。

这漏两种方法:
1.1.我建个js文件,我在main方法里,一刷新浏览器就会优先加载它,这样就可以使用了。
在这里插入图片描述
这个test.js内容:

export default {
    Server: {
        websocketIP: "192.168.0.2",//服务器地址
        
    },
    
}

然后再main.js方法中引用它(这个main你放在哪个地方都行),这个main你还可以做很多东西,比如一些随机id、时间等,就为了刷新页面就生成一个新的,给其他地方调用,相当于全局变量。

import urltest from '../../public/file/test'
// 获取内容
var Filetxt=urltest.Server.websocketIP;
console.log("txt内容:"+Filetxt);
//把它抛出去给其他地方调用
export default
  {
    Filetxt,
  }

这时,你的网页再任何页面刷新都会看到,这样的。其他的是我自己写的
在这里插入图片描述
这个地址有了,那我们怎么调用?那肯定是你再写websocket的需要id的地方屈调用啊
例如:

import main from '../util/main.js'; //引用main.js

//websocket的写法
var wsImpl = window.WebSocket || window.MozWebSocket;
window.ws = new wsImpl("ws://" + main.Filetxt + ":80" );//main.Filetxt这个就是把内容引进来了
//其他的略

这种方法简单粗暴;—很遗憾,看来半天,这种方式不行,外部修改失败。

1.2.我们在新建test.js后,我们在index.html中引用,类似上面的方法,也就是设置全局变量。–这种方式肯定也不行

1.3 VUE项目里真有个src/main.js专门设置全局变量的,方法也很简单–这种方式肯定也不行
在这里插入图片描述
在这里插入图片描述
所有其他地方调用知道了吧!

我们build后看看文件,
在这里插入图片描述
在这里插入图片描述

用户配置的时候在这个test.js中添加服务器地址就行。我不用出版本了。