目錄
配置文件
服务端获取URL
前端页面获取URL
总结
首頁 web前端 html教學 多域名环境,页面获取url的一种方案_html/css_WEB-ITnose

多域名环境,页面获取url的一种方案_html/css_WEB-ITnose

Jun 24, 2016 am 11:56 AM

由于系统是分布式部署的,并且有多个域名,所以经常涉及到获取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端专门写一个服务,把这些配置信息给到客户端页面,客户端页面也不用写死了

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML5中跨瀏覽器兼容性的最佳實踐是什麼? HTML5中跨瀏覽器兼容性的最佳實踐是什麼? Mar 17, 2025 pm 12:20 PM

文章討論了確保HTML5跨瀏覽器兼容性的最佳實踐,重點是特徵檢測,進行性增強和測試方法。

&gt; gt;的目的是什麼 元素? &gt; gt;的目的是什麼 元素? Mar 21, 2025 pm 12:34 PM

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

&lt; datalist&gt;的目的是什麼。 元素? &lt; datalist&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:33 PM

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

如何使用HTML5表單驗證屬性來驗證用戶輸入? 如何使用HTML5表單驗證屬性來驗證用戶輸入? Mar 17, 2025 pm 12:27 PM

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

&lt; meter&gt;的目的是什麼。 元素? &lt; meter&gt;的目的是什麼。 元素? Mar 21, 2025 pm 12:35 PM

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前

視口元標籤是什麼?為什麼對響應式設計很重要? 視口元標籤是什麼?為什麼對響應式設計很重要? Mar 20, 2025 pm 05:56 PM

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

&lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼? &lt; iframe&gt;的目的是什麼。 標籤?使用時的安全考慮是什麼? Mar 20, 2025 pm 06:05 PM

本文討論了&lt; iframe&gt;將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。

HTML容易為初學者學習嗎? HTML容易為初學者學習嗎? Apr 07, 2025 am 12:11 AM

HTML適合初學者學習,因為它簡單易學且能快速看到成果。 1)HTML的學習曲線平緩,易於上手。 2)只需掌握基本標籤即可開始創建網頁。 3)靈活性高,可與CSS和JavaScript結合使用。 4)豐富的學習資源和現代工具支持學習過程。

See all articles