在没有回调地狱的情况下在Node JS / Express JS中渲染多个内容(块)

时间:2012-08-22 21:43:47

标签: node.js mongodb express mongoose

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

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

您可能希望考虑类似指挥...... http://howtonode.org/step-of-conductor

答案 1 :(得分:0)

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

我建议你的jQuery方法的唯一改进是使用像underscore micro-templates这样的东西来渲染那个JSON而不是手动构建HTML。

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

如果你想全押,总会有像this

这样的方法