如何将.render()中的2个值传递给Handelbars

时间:2017-12-11 13:34:28

标签: node.js express handlebars.js

我正在尝试将多个值传递到res.render以传递到我的手柄模板中。它似乎符合条件,但它没有显示内容。

我正在尝试显示特殊的导航栏和用户片段(他们的数据),如果他们已登录。否则我想显示我的普通导航栏和所有片段(来自所有用户的数据)。

如果我只提交一个值,我就可以使用它,但我似乎无法交出多个值。

快递代码:

 router.route('/')
.get(function (request, response) {
if (request.session.name) {
  Snippet.find({ user: request.session.name._id }, function (err, data) {
    if (err) {
      console.log(err)
    }
    data.forEach(function (element, err) {
      if (err) {
        console.log(err)
      }
    })
    let context = {
      snippets: data.map(function (snippet) {
        return {
          _id: snippet._id,
          user: snippet.user,
          title: snippet.title,
          body: snippet.body,
          createdAt: snippet.createdAt
        }
      })
    }
    response.render('home/index', {loggedIn: true, context: context}) //Here is the issue
  })
  }

把手模板:

<ul class="people_list">
    {{#if loggedIn}}
        {{!-- Logged in --}}
        {{#each snippets}}
            <h2><i class="star fa fa-star-o" aria-hidden="true"></i> {{title}}</h2>
            <h4>{{ createdAt }}</h4>
            <pre>
                <code class="language-javascript">{{body}}</code>
            </pre>
            <hr />
        {{/each}}
    {{else}}
        {{!-- Not logged in --}}
        {{#each snippets}}
            <h2><i class="star fa fa-star-o" aria-hidden="true"></i> {{title}}</h2>
            <h4>{{ createdAt }}</h4>
            <pre>
                <code class="language-javascript">{{body}}</code>
            </pre>
            <hr />
        {{/each}}
    {{/if}}
</ul>

1 个答案:

答案 0 :(得分:1)

您传入一个名为context的数组,但在把手代码中将其称为snippets

将把手模板更改为名为{{#each context}}或将您的nodejs代码更改为response.render('home/index', {loggedIn: true, snippets: context})