首先需要澄清一下,该篇文章并非标题党。这里介绍需要实现的效果是让后台工作人员不需要前端改动网络请求基础地址的前提下,使用前端代码便于本地调试。
不好意思这里说的可能有点绕了,待我给你简单的说明一下你就明白了。
我们知道前端在对接后台的时候都有这么一个基础地址,所有的后台接口调用都是通过它:
let _baseURL = 'http://api.xxx.develop.com'
const service = axios.create({ // 创建 axios 实例
baseURL: _baseURL, // api base_url
timeout: 120000 // 请求超时时间
})
现在假设有这么一个场景:
后台和前端一起开发某个需求,前端童鞋比较勤(huo)劳(shao)已经开发完页面并将代码都部署到了公司的开发环境http://xxx.develop.com
上。
此时后台小哥哥A
想找你对接接口,你会运行本地的前端项目,然后将配置中的_baseURL
改为同事A
的IP
地址(假设为10.0.17.231:1001
);
但同事B
也开发完了想与你对接,你会怎么做?
“稍等一下哈,小张现在在和我对接”
“要不你先自己用postman
自测一下你的接口?”
好为南啊,前端童鞋想做到雨露均沾啊,怎么办...
此时你多么希望能把你的前端项目当成一个静态的页面,让后台小哥哥只要配置上自己的IP
地址就可以查看前端页面并进行本地调试,而不再需要前端开启服务。
该篇文章就是针对以上这种情况提供一种简单的方案,若还有更优的解决方案请评论区留言,一起学习一下😊
- 利用浏览器的
Local Storage
将后台的IP
地址存储在其中; - 前端在网络请求代码层上做一些适配,判断
Local Storage
中是否有指定的IP
地址,若是有的话则使用该地址。
这里我以使用axios
为例进行讲解,你的代码中可能存在这么一段东西:
// request.js
let _baseURL = 'http://api.xxx.develop.com'
const service = axios.create({ // 创建 axios 实例
baseURL: _baseURL, // api base_url
timeout: 120000, // 请求超时时间
headers: { 'Content-Type': 'application/json' }
})
...
(request.js
是项目中的网络请求配置)
我们只需要将baseURL
做一个简单的适配就可以了,
定义一个setBaseURL
的函数:
function setBaseURL () {
const webHost = localStorage.getItem('webHost') // 获取浏览器本地存储中Key为webHost那一项的值
if (location.origin === 'http://xxx.develop.com' && webHost) { // 判断当前的环境以及是否存在webHost
_baseURL = 'http://' + webHost // 将_baseURL重新赋值
}
return _baseURL
}
然后使用它:
// request.js
let _baseURL = 'http://api.xxx.develop.com'
function setBaseURL () {...}
const service = axios.create({ // 创建 axios 实例
baseURL: setBaseURL(), // api base_url
timeout: 120000, // 请求超时时间
headers: { 'Content-Type': 'application/json' }
})
这样项目在生成axios
实例的时候,就会判断你当前的环境(假设你只想要在开发环境上这样做),然后判断浏览器的LocalStorage
中有没有需要指定的IP
地址,从而返回新的_baseURL
。
做好了这层适配之后,前端就可以将项目build
之后放到服务器上,后台小哥哥要使用的时候做一些配置就可以了。
注
这里的webHost
字符串并非为固定写法,你也可以写成apiHost
、host
等等字段,只要和后台约定好就可以咯。
后台小哥哥在使用的时候只需要在浏览器上配置一下就可以了。
假设前端项目放到的是http://xxx.develop.com
上
- 打开
http://xxx.develop.com
,并打开控制台(window
快捷键F12
,Mac
快捷键option+command+i
); - 找到
Application
下的Local Storage
; - 展开
Local Storage
, 找到当前网址的那一项; - 在右边添加
Key
为webHost
,Value
为后台本地的IP
地址(包括端口号)的键值对。 - 刷新一下页面
如下图:
注
webHost
的拼写;- 填入的
IP
地址一定要带上端口号 - 配置完之后刷新下页面
- 该配置针对的只是你本机的浏览器
- 不想要本地调试的时候记得将这项配置清除,不然它会一直存在于你的浏览器中
- 若是想删除这项配置只需要将
Value
设置为空字符串, 或删除这一项,如下图
检测是否配置成功只需要查看一下发送的网络请求的Request URL
是否已经改变就可以了。
还是打开控制台,然后找到NetWork
那一项,筛选一下只查看XHR
的网络请求
假设原来应该请求的地址为http://api.xxx.develop.com
配置之后要请求的地址 10.0.17.231:1001
查看此时发起网络请求是不是你配置之后的地址即可。
该解决方案是前公司的前端大哥提供的,我只是将它写成文章分享给大家,在这里也要感谢前端大哥在职业道路上对我的帮助。
觉得有帮助的小伙可以点个👍支持一下 😊
知识无价,支持原创
更多推荐: