【问题标题】:Express - Async TemplatingExpress - 异步模板
【发布时间】:2015-11-22 00:28:12
【问题描述】:

我正在为我的模板引擎使用 Express-Handlebars,我想从我的模板中进行异步调用,如下例所示:

{{{cmsLoader 'search-{$searchTerm}' searchTerm=query.input defaultId='search-default'}}}

这将通过特定 id(即“search-video-games”)在 db 中查询一段 html,如果密钥存在,它会添加 html。如果键不存在,它会查找 defaultId(即“search-default”)并添加它。如果 defaultId 未指定或不存在,则不添加任何内容。

大部分后端功能都已到位。我的问题是在助手内部进行异步处理。有没有办法在完成渲染之前等待来自 hbs-helper 的异步调用的结果?

注意:

我意识到我可以从控制器内部进行这些调用并将数据提供给视图,但是有大量的模板大多数都带有多个 CMS 块,并且由于这些模板会定期更改,因此很难提前计算它们维护。

【问题讨论】:

  • Node 中的大多数引擎不会执行此 AFAIK。您需要事先获取它。你不能有一个服务/中间件来检查请求并以通用方式为每个请求添加 CMS 数据吗?
  • 很遗憾,每个 CMS 块都有一个特定的 id,并且可能会有数百个。

标签: node.js asynchronous express handlebars.js


【解决方案1】:

Handlebars 不是异步模板引擎,因此这是不可能的。您需要切换到 Node.js 的异步模板引擎,例如 Marko。 Marko 允许您在渲染开始后异步获取其他数据。

【讨论】:

  • 是的,我对 Handlebars 内部进行了更深入的研究,结果不幸地意识到了这一点。你提到 Marko 很有趣......我一直在研究它或 Nunjucks 作为可能的替代品。
猜你喜欢
  • 2014-11-24
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多