Express.js + Handlebars - 试图在视图中使用正则表达式

时间:2013-09-18 20:39:17

标签: javascript regex express handlebars.js

访问/ articles时我有以下处理程序:

exports.articles = (function(req, res) {
    Article.find( function(err, articles){
        if(err) {
            res.send(500, { error: err });
        }

        res.render('articles', { articles: articles });
    });
});

这是相应的观点:

<section id="articles">
{{#each articles}}
    <article class="geometry">
        <h4>{{ title }}</h4>
        <hr>
        <p>{{ content }}</p>
        <!-- LINK TO ARTICLE HERE -->
    </article>
{{/each}}
</section>

我想构建LINK,以便每当有人点击它时,浏览器都应该导航到/ article / title-with-dashes-instead-spaces。基本上,我想在标题上附加title.replace(/ \ s / g,' - ')之后使用它。有没有办法在使用把手的视图上格式化它?还是应该在后端完成?

谢谢!

1 个答案:

答案 0 :(得分:2)

我想它确实属于后端。在那里做起来很容易:

Article.find( function(err, articles){
  if(err) {
    res.send(500, { error: err });
  }
  articles.forEach(function(article) {
    article.link = '/article/' + article.title.replace(/\s/g, '-');
  });
  res.render('articles', { articles: articles });
});

我宁愿将此代码作为Article方法插入generateLink()模型,因为它简化了重用。

另一种方法是注册Handlebars助手......

Handlebars.registerHelper('articleLink', function() {
  return '/article/' + this.title.replace(/\s/g, '-');
});

...然后在模板中使用它:

<article class="geometry">
  <h4>{{ title }}</h4>
  <hr>
  <p>{{ content }}</p>
  <a href="{{ articleLink }}">Link</a>
</article>
相关问题