【发布时间】: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}只是有一个true或false的标志,您试图在下一个语句each error in hasErrors中循环使用它。要么您应该使用另一个变量(数组),要么应该为hasError分配一个数组。 -
我使用教程来学习这个,它在车把中,我只是想在哈巴狗中创建相同的应用程序。我在上面发布了车把代码,我要做的就是使用 pug 重新创建相同的应用程序。所以除非我错过了什么,否则这不是路线。
-
现在我看到您已经使用
handlebars代码更新了您的问题。在那里你有 wtitten{{# each messages }}并且在 Pug 中它写为each error in hasErrors。为什么不是each error in messages?