我在單個AWS EC2實例上運行Nodejs和Angularjs應用程序。應用程序的代碼結構如下:如何將AWS EC2上運行的Nodej和AWS S3上的靜態Angularjs內容集成在一起?
目前,當用戶嚮應用程序中的第一個呼叫,該呼叫是通過明示的NodeJS框架處理,並且呼叫被引導至的index.html角靜態目錄內頁,使用下面的代碼在服務器/ server.js文件
res.sendFile(path.resolve(__dirname + '/../web/dist/index.html'));
從index.html的,各種靜態組件(JS,HTML,CSS等)被調用,所有angularjs控制器/服務做出回調到nodejs API以滿足用戶請求。
這種安排在單個實例中正常工作。現在我想將有角度的靜態內容(即web目錄移動到AWS S3)。這樣做,我要在server.js修改下面的代碼:
res.sendFile(path.resolve('**AWS S3 URL** +/web/dist/index.html'));
我的靜態文件現在已經轉移到AWS S3。此外,在這樣做時,我必須修改所有角度控制器和服務以使用絕對路徑來調用Nodejs API。這意味着需要進行大量更改並引入部署配置(我們必須稍後才能實現靈活性)。
另一種方法,我們可以採取的是移動的index.html從網絡到服務器文件夾通過在服務器/ server.js以下變化:
res.sendFile(path.resolve(__dirname + '/../server/index.html'));
然後添加以下代碼server.js處理重定向從到的NodeJS S3的靜態內容,這樣的事情:
app.get('/assets/*', function(req, res){
var requestURL = req.url;
var redirectedURL = <<**Remote S3 base URL**>> + requestURL;
res.redirect(redirectedURL);
});
然而,值得關注的是會有很多的重定向,我想知道,如果這是一個好的設計?我已經閱讀過,搜索引擎不喜歡有很多重定向的應用程序(HTTP 301,304),並將這些頁面排在較低的位置。因此,我試圖找出在AWS EC2上部署nodejs和在S3上部署靜態angularjs內容時的最佳做法。任何意見將不勝感激。
沒有任何需要重定向。您應該直接從S3中爲您的靜態Web內容提供服務,這可以通過爲您的資源使用S3 URL來實現。這也將減少服務器的負載。 – user818510
您是否建議通過瀏覽器直接訪問index.html(在S3中),而不是通過nodejs將調用轉發給index.html,並且使用絕對NodejS API URL更新S3中的所有角度控制器。 – Dev