2015-07-20 52 views
1

我正在開發一個web應用程序,客戶端是一個用於使用我的REST服務器端API的angularJS應用程序,因此我公共目錄中的所有文件都是靜態的。服務我的angularJS web應用靜態內容,nodeJS或apache?

我想嘗試NodeJS + express來製作我的服務器端API,因爲我聽過這麼多,我瀏覽了很多教程,現在我明白瞭如何製作API。

但我不明白爲什麼服務我的靜態文件感覺如此複雜,我已經使用LAMP堆棧很多,使用它的靜態內容很容易,甚至沒有一行代碼。使用節點似乎我將不得不爲每個文件寫路由?

我已閱讀過有關使用apache提供靜態內容並擁有應用程序參考節點的人,那該怎麼辦?我可以將我的客戶端ajax請求指向不同的端口,並讓節點在服務器上的該端口上運行,或者我需要另一個IP?

這方面的最佳做法是什麼?

+0

你要求最佳實踐。我有一個網站,它有一個NodeJS + Express後端和AngularJS + Angular-UI/UI-Router前端。我所有的視圖都是從Jade模板呈現並以HTML格式輸出。您可以在公用文件夾中創建'模板'文件夾,然後以.html格式存儲。這是你想要做的嗎?這些可以從youwebsite.com/templates/template.html訪問,或者像我一樣,可以從Jade文件生成模板,該文件通過控制器進行訪問驗證以及任何其他可能需要做的清理。 –

+0

如果將它們存儲在公用文件夾中,則不必爲每個文件編寫不同的路由。 –

回答

3

Apache可能會比node.js更高效。 Apache特別會有更多的開銷。通常我使用nginx來做這種事情。在你的情況下,由於你的資產是靜態的,它還可以將所有資產上傳到CDN。

從nodejs提供的靜態文件的一個問題是它不處理像緩存,緩存控制,url_rewriting和DoS攻擊提供的安全性。我真的推薦在生產中使用nginx來提供靜態資產,或者CDN,可能是2的組合。您不希望從您的API提供資產,它有一個明確的分隔線以便您可以擴展每個人單獨,因爲它的可能你的API將需要更快地擴展。

像Nginx這樣的東西肯定會在負載下表現更好。使用快遞的唯一好處是更容易設置。但是,您只需設置一次nginx,然後只需部署到配置的Web根目錄即可。 Apache可能也會更好地處理負載,但並不像輕量級,因爲它依賴於舊式的分叉處理方法來處理併發,其中Nginx非常像node.js異步。

最佳實踐是絕對靜態服務文件有一些像nginx,CDN或其他網絡服務器這樣的文件。在我看來,從node.js提供文件通常用於小型,低流量的網站。你可以完全按照你的描述。你可以在不同的端口上使用你的API。最常見的是你的「http://mywebsite.com/」你的UI和子域「http://api.mywebsite.com/」上的你的API。但是,如果您使用不同的端口運行同一臺計算機,則可能比嘗試將兩個域配置到同一個框更容易。在製作過程中,我一定會保留在端口80上,併爲api提供一個子域。

至於veggiesaurus的回答,我不同意。您通常會運行grunt/gulp/similar來縮小和構建您的資產。您可以簡單地將您的資產構建到特定的webroot。然後,您可以在配置文件或環境變量中指定此Web根目錄。我個人更喜歡在服務器上構建我的應用程序,因此我可以相應地將我的項目構建到其環境中。構建腳本還可以作爲應用程序的啓動程序,或者爲系統創建初始化腳本,以便確保應用程序繼續運行並在程序崩潰時重新啓動。把項目構建包含在你的倉庫中是很麻煩的,如果你的構建到你的項目目錄之外的路徑,那麼你不必擔心git忽略了你的構建。如果你想在那個目錄下構建,你可以簡單地在那裏配置你的web根目錄,但是我個人更喜歡不這樣做。

+0

感謝所有有用的信息!我沒有使用Nginx作爲apache的替代品,但我一定會考慮它! 我也從來不知道CDN將主辦一個網站資源,我只消耗它們來獲得圖書館等! –

+0

CDN可以處理任何類型的靜態資產。您可以從技術上將您的整個前端放在CDN上,前提是它的所有靜態資源都是角度前端特別常見的。 Nginx的配置非常簡單。有很多指南。我個人喜歡數字海洋提供的知識庫,因爲他們的大多數指南並不針對他們的平臺。 – tsturzl

+0

@tsturzl我無法在類似的問題上得到任何答案(不同的執行方式)。你可以看看一樣嗎? – gonephishing

0

如果您的文件都是公開的,您可以將它們全部放在public子文件夾中,然後用快寫幾行代碼並完成它。你可以看到一個指南here。至於向另一個端口發出ajax請求,這絕對有效。你只需要確保你配置你的express服務器來偵聽那個端口。

5

服務上的NodeJS靜態文件是超級容易,只要所有這些文件添加到一個公用文件夾和下面的中間件添加到您的快遞應用:

app.use(express.static(__dirname + '/public')); 

其中__dirname + '/public'是路徑到公用文件夾。就是這樣,一行代碼。

相關問題