【问题标题】:Pug iteration -- express routesPug 迭代——快速路线
【发布时间】:2018-02-15 23:57:28
【问题描述】:

我有一个快速返回错误消息的路由。使用连接闪存。一切正常,我记录了消息,但我无法在我的 pug 文件中显示消息。希望有人能指导我解决我的错误/误解。我是按照教程学习express的,所以我会先发布我的代码,然后再发布带有把手的教程代码。

我的路线是这样的:

    router.get('/signup', function (req, res) {
    var messages = req.flash('error')
    console.log(messages)
    res.render('signup', { csrfToken: req.csrfToken(), messages: messages, hasErrors : messages.length > 0 });
});

这是我的注册翡翠文件。请注意顶部的 if 块与“每个”迭代,然后在 P 行中显示 SINGLE 消息:

extends layout


block content

  //- The error is logged but not displaying in my pug
  //- Error iteration to display error messages
  if (hasErrors)
    each error in hasErrors
      p= error
  //- end of iteration
  div.constainer
    div.row
      div.col-md-4.offset-4
        h1 Signup
        form(action="" method="post")
          div.form-group
            label E-mail:
            br
            input.form-control( type="text" id="email" name="email")
          div.form-group
            label Password:
            br
          input.form-control( type="password" id="password" name="password")
          br
          input(type="hidden" name = "_csrf" value="#{csrfToken}")
        button(type="submit") Signup

原始教程带有车把,并且可以正常工作。我正在尝试用 pug 重新创建相同的示例。这是带有车把代码的教程:

div class="row">
    <div class="col-md-4 col-md-offset-4">
        <h1>Sign Up</h1>
        >>>>>>***{{#if hasErrors}}
            <div class="alert alert-danger">
                {{# each messages }}
                    <p>{{this}}</p>
                {{/each}}
            </div>
        >>>>>>{{/if}}***
        <form action="/user/signup" method="post">
            <div class="form-group">
                <label for="email">E-Mail</label>
                <input type="text" id="email" name="email" class="form-control">
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" id="password" name="password" class="form-control">
            </div>
            <input type="hidden" name="_csrf" value="{{ csrfToken }}">
            <button type="submit" class="btn btn-primary">Sign Up</button>
        </form>
    </div>
</div>

带有把手代码的代码有效。我只是将相同的代码翻译成哈巴狗。 如果我完全删除迭代并添加 #{hasErrors} Jade 显示 true 和 false 所以我的路线很好,这是我在 Pug 中的迭代。

我是初学者。任何帮助将不胜感激。

【问题讨论】:

  • 您可以尝试打印hasErrors 吗?它应该是一个数组而不是布尔值。
  • 在我的玉中,我刚刚添加了#{hasErrors},当我输入用户名和密码时,它用“false”编译了页面。
  • 这正是问题所在,因为#{hasError} 只是有一个truefalse 的标志,您试图在下一个语句each error in hasErrors 中循环使用它。要么您应该使用另一个变量(数组),要么应该为 hasError 分配一个数组。
  • 我使用教程来学习这个,它在车把中,我只是想在哈巴狗中创建相同的应用程序。我在上面发布了车把代码,我要做的就是使用 pug 重新创建相同的应用程序。所以除非我错过了什么,否则这不是路线。
  • 现在我看到您已经使用handlebars 代码更新了您的问题。在那里你有 wtitten {{# each messages }} 并且在 Pug 中它写为 each error in hasErrors。为什么不是each error in messages

标签: express iteration pug


【解决方案1】:

经 OP 确认,each 语句应为 each error in messages

【讨论】: