簡體   English   中英

同一Azure應用服務中的Java API和angular SPA

[英]java API and angular SPA in the same Azure App Service

我可以在一個單一應用程序服務中將我的Java API作為虛擬應用程序在/ api下運行,而我的前端角度SPA在/下運行嗎?

在我的應用程序設置中:

  • 我已經將Java設置為版本8
  • 我已將Web容器設置為Tomcat 9
  • 在虛擬應用程序部分中,我有:
    • 虛擬目錄:/和路徑:site \\ wwwroot
    • 虛擬目錄:/ api和路徑:site \\ wwwroot \\ api
    • 兩者都標記為“應用程序”

部署兩個虛擬應用程序后,當我轉到應用程序服務URL時,可以正確獲取前端,但是也有對API的調用,該API處於等待狀態幾分鍾,然后出現500錯誤。 如果我嘗試直接訪問API,則會出現同樣的500錯誤。

該API是使用Spring構建的,它是我設置的web.config文件:

<applicationInitialization doAppInitAfterRestart="true">
            <add initializationPage="/api"/>
            <add initializationPage="/api/health"/>
            <add initializationPage="/api/info"/>
        </applicationInitialization>

我希望API和SPA都在同一個域中。 目前,可以從任何域訪問API,對此沒有任何限制。

我究竟做錯了什么? 我該如何運作?

根據我的經驗,將Web項目部署到Azure App Service時不必創建virtual directory

在門戶網站上設置application settings后,

在此處輸入圖片說明

您可以將項目生成的war package放在KUDU上的D:\\home\\site\\wwwroot\\webapps目錄下,然后重新啟動應用程序。

在此處輸入圖片說明

請注意,如果將war軟件包的名稱設置為ROOT.war ,則可以直接通過domain name (例如http://jaygong.azurewebsites.net/訪問應用程序,而無需在其中添加war軟件包的名稱。您的請求網址。

您也可以直接通過路徑訪問靜態文件,例如http://jaygong.azurewebsites.net/image/image.jpg


更新的答案

根據我的經驗,您可以使用兩種方法在Spring Boot應用程序服務中調用另一個應用程序服務API。

1. spring boot的首頁調用了background方法,通過HTTP請求在另一個應用程序服務API和自身之間傳遞消息,並將結果返回到前端。 以這種方式不存在CORS問題。

2. spring boot的首頁直接調用另一個應用程序服務API。 您可以參考下面的js,該線程在此線程中啟用CORS AngularJS發送HTTP POST請求

allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  if ('OPTIONS' === req.method) {
    res.send(200);
  } else {
    next();
  }
};

app.use(allowCrossDomain);

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM