2013-08-23 29 views
1

我正在構建一個單頁應用程序(使用AngularJS),它可以將數據從REST API調用到遺留系統。這個遺留系統非常大,用Java編寫,需要幾分鐘時間才能部署,所以我們認爲開發完全獨立於遺留系統的單頁應用程序會更有成效。部署依賴rest api的單頁應用程序的一些技巧是什麼?

一旦我們嘗試與遺留系統的REST API進行通信,就會出現問題。雖然這兩個應用程序都在本地部署到同一主機,但它們部署在不同的應用程序服務器上,因此我需要在通信時使用不同的端口。但是,由於SPA正在與另一個端口上的REST API進行通信,瀏覽器阻止了我的請求防禦Cross Site Scripting攻擊。

我們發現這個構建工具名稱爲lineman(即利用grunt),可以輕鬆代理http請求。這讓我們瞭解了跨站腳本的限制,但這隻適用於開發模式。

既然我們已經有了一個概念驗證的工作,我們想知道我們應該如何在沒有代理的情況下將這些應用程序部署在一起。我很難找到關於如何做到這一點的建議,因爲Angular並不認爲你有第一個後端,大部分在前端使用Angular的人都沒有在後端使用Java(如果這很重要的話) 。

我們正在運行到喜歡的應用程序上下文路徑問題的變化取決於他們是否部署在PROD模式VS開發模式,使我們的寶貝,想起巧妙的方法來避免兩種模式工作,斷開鏈接。我想知道我是否在這裏沿着這個方向走錯了一步。我應該避免在與後端分開的服務器上開發SPA嗎?

回答

1

我們遇到了同樣的問題。 URL的情況是,您將有不同的URL路徑到您的Java REST API,因爲您處於不同的環境中。

爲了使這些路徑級聯到角度應用程序,我們必須首先將Web應用程序(生成Angular的應用程序)中的基本路徑外部化爲使用在部署期間設置的值,具體取決於它部署的位置至。我們的應用服務器中有值鏈接到配置文件中的XML值,然後我們在應用中引用它們。

然後,我們創建一個從Angular應用程序到產生它的Web應用程序(不是Java REST API)的調用,它將返回正確的環境URL。

在角度應用程序中,我們可以使用正確的基本路徑設置結果(URL的其餘部分應該從環境保持不變)。

如果您可以通過外部化環境設置使第一部分正常工作,其餘部分並不困難。

+0

好吧,當您部署到生產環境時,您的角度應用程序是否與您的舊應用程序在同一個戰爭中? –

+0

角度應用程序與傳統應用程序是完全不同的應用程序。角度應用程序本質上只是一個以用戶界面爲中心的應用程序,只要知道正確的基本URL,即可從傳統應用程序獲取所有數據。它從它自己產生的應用程序獲取基本URL。 – BoxerBucks

+0

那麼您如何避免生產中的所有XSS問題?你是否也在生產中運行代理? –

1

我會把Apache放在前面,並使用mod_proxy作爲應用程序的反向代理。

假設您的REST API位於http:// localhost:9000。如果角度應用程序只是靜態資產,您可以直接在apache下部署它。如果不是,則反向代理它。 對於REST api yoivsetup爲local/9000的say/api反向代理。因此,任何在http://some.host.name/api處遇到apache的請求都將被轉發到舊系統。現在修復角度的應用程序,你就完成了。 對於本地開發,您可以使用易於以類似方式設置的節點http代理

相關問題