2013-12-09 48 views
1

我有一個應用程序,我正在開發使用快遞幾乎是一個純靜態站點,除了兩種形式發佈到服務器(聯繫表單和請求形成)。該網站大約有10個靜態頁面和兩個服務器端路徑來接受表單提交。大多數靜態快速應用程序與一個服務器端路由

我開始用jade,stylus和coffeescript開發應用程序的前端,使用grunt作爲開發服務器和構建工具來輸出所有這些的生產就緒版本(concat,min等)。靜態資產。

現在到兩個服務器端路由。我很好奇人們對這種情況的看法,其中應用程序包含90%的靜態HTML,只有一個或兩個服務器端路由。

到目前爲止,我認爲三個選項:

選項#1:純靜態的HTML和「外包」兩種形式,以一個像Wufoo項目

這將完全消除在快遞的需要生產。我可以繼續使用grunt來構建應用程序。但是,我不喜歡這種方法,因爲我不能完全控制表單提交。更何況,提交免費帳戶的表格數量是有限的。

選項#2:使用快遞和玉

我不喜歡這種方法,無論是因爲我將確定10點左右的服務器端的路線,所有這些都只是呈現玉模板純粹的服務器端。這不是矯枉過正嗎?我的路線將會充斥着app.get()的呼叫,其中包含回撥中的單個res.render()。另外,即使我們可能說毫秒,爲什麼在不需要它的頁面上包含中間件?

選項#3:#1和#2混合,使用express.static()中間件

對於這個選擇,我會使用類似grunt-express。這是我最喜歡的選擇,但是將客戶端和服務器端的玉石模板混合似乎有點「骯髒」。我的意思是,快速應用程序將有(兩個)服務器端路線,負責渲染一個玉器模板。通過調用express.static()來調用這個指針,該指針指向一個包含從玉石編譯的靜態HTML文件的目錄,這對我來說似乎有點「骯髒」。我不知道爲什麼。

如果我選擇選項#3,我的grunt構建腳本將如何工作?最好是我希望構建輸出一個dist/文件夾,其中包含一個生產準備快速應用程序,包括我的小小app.js文件。

任何想法非常感謝!

+0

一種選擇是使用另一個網絡服務器(比如Nginx)來獲取靜態資產,並且只保留Node.js用於動態內容。我在這裏談論這個方法:http://hectorcorrea.com/#/blog/running-a-node-js-web-site-in-production-part-2/53 –

+0

我其實很喜歡這個想法,但不知道這兩個(前端和後端)如何共存,因爲我有多個運行在服務器上的快遞應用程序。我會閱讀鏈接的博客。你能提供詳細的答案嗎?謝謝:) – Feech

回答

2

選項#2

res.render(......)是非常聰明的

  • 它將不會再次生成HTML(如果您不更改res。當地人)
  • 除了該渲染具有智能緩存控制,它會發送「304未修改」瀏覽器,而不是全身。

只要使用選項#2,並確保瀏覽器獲取304的靜態內容。如果你只是nodejs的新手,確保你在'生產'模式下啓動你的節點,因爲玉的'開發'速度很慢。

0

可以渲染所有的東西在服務器端模板像

app.get('/:template', function (req, res) { 
    res.render(req.params.template); 
}); 
+0

這將如何與404工作?我不喜歡這個的原因之一是因爲請求必須通過任何不必要的中間件運行。我還想縮小HTML以提高性能。 – Feech

+1

你可能希望通過一些存在檢查來實現這一點,或者使用像'/:template(page1 | page2 | page3)'或其他類似的正則表達式。但我認爲你應該選擇一個,和它一起生活一段時間,當你瞭解痛點時切換到別的東西。對於一個小型網站來說,嘗試自己而不需要在計算器上進行調查和辯論是一個很好的習慣。 –

+0

我列出三個潛在選項的唯一原因是我已經考慮了一些問題。我可以提出這個問題:「我應該如何處理大多數靜態HTML(玉)模板與快速應用程序?」 – Feech

相關問題