主要是静态表达app,有一个服务器端路由

时间:2013-12-09 20:14:41

标签: node.js express gruntjs

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

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

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

到目前为止,我已经考虑了三种选择:

选项#1:纯静态HTML并将两种形式“外包”给像Wufoo这样的人

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

选项#2:纯服务器端使用express和Jade

我不喜欢这种方法,因为我会定义10个左右的服务器端路由,所有这些路由都只是渲染玉石模板。那不是太难了吗?使用app.get()次调用时,我的路线将会出现问题,这些调用在回调中包含一个res.render()。此外,即使我们可能正在谈论毫秒,为什么在不需要它的页面上包含中间件呢?

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

对于此选项,我会使用类似grunt-express的内容。这是我最喜欢的选项,但混合客户端和服务器端jade模板似乎有点“脏”。我的意思是快递应用程序将有(两个)服务器端路由负责呈现玉模板。将此与对express.static()的调用混合,该调用指向包含从jade编译的静态HTML文件的目录,这对我来说似乎有点“肮脏”。我不确定为什么。

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

非常感谢任何想法!

2 个答案:

答案 0 :(得分:2)

选项#2

res.render(...)非常聪明

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

只需使用选项#2,并确保浏览器获得304静态内容。如果您只是nodejs的新手,请确保以“生产”模式启动节点,因为“开发”中的jade很慢。

答案 1 :(得分:0)

您可以使用类似

的内容呈现所有服务器端模板
app.get('/:template', function (req, res) {
    res.render(req.params.template);
});