由于系统是分布式部署的,并且有多个域名,所以经常涉及到获取url的问题。这是系统框架层面需要提供的能力,否则每个模块都需要自己去想办法获取ip,就会很混乱,上线也容易发生bug
主要需要解决几个问题:
1、能够自动区分开发环境和生产环境。比如部署上线,url可能是http://www.xxx.com/svc/hello,而在本地开发的时候应该是http://127.0.0.1/svc/hello。而不能写死,否则开发和部署就要换来换去,很麻烦
2、能够根据不同的服务,区分URL。比如获取验证码的服务,应该调用http://www.xxx.com/svc/getCode,而微信相关的服务,应该调用http://wx.xxx.com/svc/xxx
本文总结分享一下思路:
配置文件
1、应用有对应的配置文件,里面说明了是以开发模式,还是以生产模式启动。并且将URL分离开,比如鉴权相关的URL,微信相关的URL,普通服务相关的URL等
2、同时,配置文件有多份,比如topo-dev.json,topo-production.json,topo-image.json等。这样就把不同的环境隔离开,如果是以开发模式启动,加载的就是topo-dev.json,其中配置的URL都是127.0.0.1这样的
3、启动的时候,加载此配置文件,并将关键信息放在global._g_env全局变量下面,运行时就能很方便地获取到环境和URL信息了
服务端获取URL
服务端的代码也是跑在node环境下,所以要获取URL就很简单,通过_g_env.url,就可以拿到配置文件里的路径了
前端页面获取URL
前端页面经常也需要发送ajax请求,所以也需要知道url。但是静态的js没有办法获取server的环境信息和URL等,所以需要从服务端获取到这些信息,一种可行的做法是:
首先服务端有一个服务,专门将这些信息下发:
function clientSettingScript(req, res, next){ var script = "window.global = {_g_server:{}}; \n"+ ";global[\"_g_server\"].staticurl=\"" +global["_g_topo"].clientAccess.staticurl + "\"\n"+ ";global[\"_g_server\"].uploadurl=\"" +global["_g_topo"].clientAccess.uploadurl + "\"\n"+ ";global[\"_g_server\"].authurl=\"" +global["_g_topo"].clientAccess.authurl + "\"\n"+ ";global[\"_g_server\"].serviceurl=\"" +global["_g_topo"].clientAccess.serviceurl + "\"\n"+ ";global[\"_g_server\"].wxserviceurl=\"" +global["_g_topo"].clientAccess.wxserviceurl + "\"\n"+ ";global[\"_g_server\"].nail_pc_url=\"" +global["_g_topo"].connector.nail_pc_url + "\"\n"+ ";global[\"_g_env\"] =\"" +global["_g_topo"].env+ "\";\n"; res.end(script);}
这是一个express的普通服务,但是其实是一段js脚本。在前端页面,用script标签来加载它
<script src="/svc/portal/setting"></script>
这样当浏览器拿到响应之后,就会将它作为一段js脚本来执行,在window上放了一个全局变量global,其中有环境信息和URL信息
同时,URL只包含域名,页面根据实际情况,组装完整的URL,比如:
security_code_url: global["_g_server"].serviceurl + "/getCode/"
总结
这种做法的关键在于:
1、把URL和环境信息放到单独的配置文件中,而不是写死在代码里。同时根据开发环境、生产环境、镜像环境隔离不同的配置文件
2、server端专门写一个服务,把这些配置信息给到客户端页面,客户端页面也不用写死了

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代码” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代码”代码“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。

AnexampleOfAstartingTaginHtmlis,beginSaparagraph.startingTagSareEssentialInhtmlastheyInitiateEllements,defiteTheeTheErtypes,andarecrucialforsstructuringwebpages wepages webpages andConstructingthedom。

如何设计菜单中的虚线分割效果?在设计菜单时,菜名和价格的左右对齐通常不难实现,但中间的虚线或点如何...

网页代码编辑器中的HTML元素分析许多在线代码编辑器允许用户输入HTML、CSS和JavaScript代码。最近,有人提出了一...

关于使用react-app-rewired构建静态页面时如何避免代码压缩许多开发者在使用React构建静态页面时,希望在交付给�...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器