【问题标题】:Render multiple pieces of content (blocks) in Node JS / Express JS without callback hell在 Node JS / Express JS 中渲染多条内容(块)而无需回调地狱
【发布时间】:2012-08-24 03:40:12
【问题描述】:

我有一个使用 res.render("/somepage", vars) 渲染的页面。 vars 是一个包含查询结果的对象。但是,如果我想在侧边栏中显示一段不相关的内容而不创建回调地狱并在 vars 中包含两个查询的结果怎么办?使用 async/promises 不是一种选择。

我使用的方法是仅创建主要内容,然后使用 jQuery $.get 通过调用返回 JSON 对象的 URL 来获取侧边栏内容。这个 JSON 对象是另一个查询的结果,我使用 res.json(someQueryResult)

创建它

我在 http://lelizondo.tumblr.com/post/29971693078/holy-sh-batman-showing-async-blocks-of-data-from 上发表了更广泛的解释,但我想知道是否有更好的方法,可能使用部分或我缺少的其他技术。

谢谢。

【问题讨论】:

  • 为什么不能选择异步?我认为每个页面加载两个请求非常浪费。

标签: node.js mongodb express mongoose


【解决方案1】:

您可能希望考虑像导体这样的东西..http://howtonode.org/step-of-conductor

【讨论】:

  • 谢谢。正如我所见,导体的问题是相同的,您必须在 将结果传递给 res.render() 之前进行所有查询。
  • 好吧,我不明白在开始渲染模板时或之后如何进行查询。
【解决方案2】:

这可能更像是一个发展哲学问题。正如第一位评论者所提到的,从某种意义上说,向服务器发出两个请求以呈现单个页面是一种浪费。但是,如果这是真正独立于主体的内容,您可能确实希望避免将其查询/呈现与您的主体内容纠缠在一起。这使您可以单独维护它(减少错误的风险),并可能让不同的人(如果您在团队环境中)处理组成页面的不同“小部件”。

我建议对您的 jQuery 方法的唯一改进是使用 underscore micro-templates 之类的东西来呈现该 JSON,而不是手动构建 HTML。

朝着这个方向迈出的下一步(就像我说的那样,这是一个哲学问题)将在客户端使用 backbone.js 之类的东西,并将您的服务器端路由扩展为完整的 REST API。然后理论上它甚至可能来自不同的 node.js 服务器随着您的网站的增长。

如果你想全押,总有一种方法,比如this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多