因为系统是分布式部署的。而且有多个域名,所以常常涉及到获取url的问题。

这是系统框架层面须要提供的能力。否则每一个模块都须要自己去想办法获取ip,就会非常混乱。上线也easy发生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就非常easy,通过_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端专门写一个服务,把这些配置信息给到client页面,client页面也不用写死了

多域名环境,页面获取url的一种方案相关推荐

  1. html的子页面获取自己url,如何从html页面获取url参数并将其显示在textarea中?

    我用下面的在我的HTML页面的JavaScript功能,我想没有textarea的任何连接操作正常显示参数....如何从html页面获取url参数并将其显示在textarea中? function g ...

  2. javascript写的关于静态页面获取URL传递参数的函数[原创]

    2005.04.29发表于blog.csdn.net/zxub 昨天搬家居然忘搬这篇文章了,郁闷~ 以前写了关于静态页面刷新后,跳转菜单定位的函数,前几天没事看了看,感觉还是有点问题,通用性不好,所以 ...

  3. tp5 前台页面获取url链接里的参数,如下

    tp5 前台页面获取url链接里的参数,如下 {:$_GET['num']} {:isset($_GET['num'])?$_GET['num']:'0';}

  4. H5页面获取url参数

    1.url为:test.html?id=1064&td_channelid=3&type=3&from=groupmessage parseUrl: function() {v ...

  5. pc页面样式自适应的几种方案

    扩展知识 1. font-size 默认值 浏览器默认fontSize为16px.即100%=16px 1px=62.5%. 即默认16px 代表1rem 2. vw(相对单位) 屏幕分成100份=1 ...

  6. .NET手记-JS获取Url参数

    最近为App做活动专区,其中很多活动都是采用html 5页面来制作的.一方面体量较小,制作快速,更新维护容易:另一方面,嵌入App后适配效果也不会很差. 这里我们采用混编形式来从native app传 ...

  7. js获取url参数vue.js获取url参数 JQ获取url参数

    在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结. 1.window.location.href(设置或获取整个 URL 为字符串) ...

  8. html当前域名,js取得当前url,javascript获取当前页面url值,js获取域名

    运行如下: thisDLoc = document.location; thisURL = document.URL; thisHREF = document.location.href; thisS ...

  9. PHP获取当前页面完整URL地址

    示例一: <?php // 说明:获取完整URLfunction curPageURL() {$pageURL = 'http';if ($_SERVER["HTTPS"] ...

最新文章

  1. Linux(CentOS 7_x64位)系统下安装RDkit(修正)
  2. Opencv笔记(九)——图像阈值
  3. 精雕道路怎么遍弧形_防水施工怎么做?专业防水施工注意事项
  4. 【Python+selenium Wendriver API】之下拉框定位
  5. 构建仪表、图表控件的绘制框架
  6. Project编写功能点的规划时间
  7. 10人以下小团队管理手册-学习笔记
  8. mysql 密码修改时间_Mysql修改密码的方法
  9. SpringCloud微服务注册调用入门-路由网关
  10. VS2013+OSG3.4.0+Qt5.5.1编译(超详)
  11. Spring 源码解析!
  12. 数据结构C++ 栈——栈的应用
  13. 四菱天线怎么加强_白话天线(2)---什么是天线?
  14. C语言合法常量123L,C语言综合习(最终版).doc
  15. android信息实现,Android 信息分享实现
  16. matlab的simulink文件mdl和slx对比
  17. python图像条状状噪声_一种红外图像条状噪声消除方法与流程
  18. python连接MongoDB
  19. 关于提问的一些书籍及文章
  20. mysql报错信息1067_mysql 1067错误报错!这个是mysqld - -console得到的信息

热门文章

  1. SVN配置 svn:needs-lock commit提交后,图标为灰色,文件为只读。
  2. 20100929 朝会内容
  3. [课后作业] 第032讲:异常处理:你不可能总是对的
  4. JWT跨域身份验证解决方案
  5. 3DSMAX安装未完成,某些产品无法安装的解决方法
  6. f5源站获取http/https访问的真实源IP解决方案
  7. javascript在数组的开头推送元素[重复]
  8. 无人车前轮转向参数校准分析
  9. mockwebserver java_在Java中使用WireMock和SOAP Web服务
  10. 洛谷——P1001 A+B Problem