主要是静态的快递应用程序与一个服务器端路由

我有一个应用程序,我正在开发使用快递几乎是一个纯粹的静态网站,除了发布到服务器(联系表格和请求表单)的两种forms。 该网站大约有10个静态页面和两个服务器端path来接受表单提交。

我开始用jade,stylus和coffeescript开发应用程序的前端,使用grunt作为开发服务器和构build工具来输出所有这些静态资产的生产就绪版本(concat,min等等)。

现在到两个服务器端路由。 我很好奇人们的想法是在这种情况下,应用程序包含90%的静态HTML,只有一个或两个服务器端路线。

到目前为止,我已经考虑了三种select

选项1:纯粹的静态HTML,将这两种forms“外包”给像Wufoo这样的人

这将消除在生产中完全expression的需要。 我可以继续使用grunt来构build应用程序。 不过,我不喜欢这种方法,因为我不会完全控制表单提交。 更何况,提交免费帐户的表格数量是有限的。

选项#2:纯粹服务器端使用快递和翡翠

我不喜欢这种方法,因为我会定义10个左右的服务器端路由,所有这些只是简单地呈现一个玉模板。 这不是矫枉过正吗? 我的路线将被放在callback中包含单个res.render()调用中。 另外,即使我们可能说毫秒,为什么在不需要它的页面上包含中间件?

选项#3:使用express.static()中间件混合#1和#2

对于这个选项,我会用grunt-express之类的东西。 这是我最喜欢的select,但是混合客户端和服务器端的玉石模板似乎有点“肮脏”。 我的意思是,快速应用程序将有(两个)服务器端路由,负责渲染一个玉模板。 通过调用express.static()指向一个包含静态HTML文件的目录,这个静态HTML文件是由玉来编译的,这对我来说似乎有点“肮脏”。 我不知道为什么。

如果我select选项#3,我的grunt构build脚本将如何工作? 最好,我希望构build输出dist/文件夹,其中包含生产就绪快递的应用程序,包括我的小小app.js文件。

任何想法,非常感谢!

选项#2

res.render(…)非常聪明

  • 它不会再生成HTML(如果你不改变res.locals)
  • 除了渲染器具有智能caching控制外,它还会向浏览器发送“304未修改”,而不是全身。

只要使用选项#2,并确保浏览器获得304的静态内容。 如果你只是nodejs的新手,确保你在'生产'模式下启动你的节点,因为玉的'开发'是缓慢的。

你可以使用类似的东西渲染所有的服务器端模板

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