【问题标题】:Express, check if a template existsExpress,检查模板是否存在
【发布时间】:2013-06-07 12:43:19
【问题描述】:

有没有办法可以判断给定模板是否存在于 express 中?基本上我想创建特定的后备模板,但不想在模板本身中包含该逻辑。

if( res.templateExists( 'specific_page' ) ) {
  res.render( 'specific_page' );
} else {
  res.render( 'generic_page' );
}

specific_page 名称是在运行时根据用户设备、语言等生成的。

注意:我不需要知道如何在模板中进行字符串本地化,我已经拥有了。我正在寻找整个布局/模板发生变化的情况。

【问题讨论】:

标签: node.js express


【解决方案1】:

你可以这样使用:

res.render('specific_page', function(err, html) {
  if (err) {
    if (err.message.indexOf('Failed to lookup view') !== -1) {
      return res.render('generic_page');
    }
    throw err;
  }
  res.send(html);
});

这将区分由于找不到模板而引发的错误(在这种情况下,它将呈现generic_page)和可能发生的任何其他错误(重新引发)。它并不完全稳定,因为它依赖于抛出的错误消息,但我认为没有其他方法可以确定错误类型。

【讨论】:

  • 不幸的是,这让我无法区分模板中的错误和模板不存在。因此,我不确定是否应该发出警报、未通过测试或其他方式。
  • 我看到 err.message 是带有 nunjucks 3.0.0 的 template not found: <template-relative-path>。也许它后来从Failed to lookup view 变成了这个。
  • @trss 鉴于答案已超过 4 年,我不会感到惊讶:D
  • 我正在使用它来创建一个后备模板。令人不安的是,没有可靠的方法来实现这一目标。如果有任何其他方式可以进行后备,请告诉我。
  • @trss 你可以使用fs.exists(app.get('views') + '/your/template', ...) 或类似的东西
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 2013-05-21
  • 2015-01-15
  • 1970-01-01
  • 2011-11-20
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多