我的主页上有index.ejs
,为我的注册页面呈现<%- partial ('../user/new.ejs') %>
。在添加flash错误消息的过程中,我注意到partial不能访问本地 [flash undefined error] 。同时,如果我将partial加载为视图(通过直接访问root/user/new
,则可以正确执行flash消息。
有人可以解释为什么会这样,是否有任何解决方法?
可能原因:index.ejs
是通过res.redirect
加载的,同时专用注册视图是通过res.view
加载的?
控制器:
create: function (req, res, next) {
User.create({
email: req.param('email'),
encryptedPassword: req.param('password')
}, function userCreated(err, user) {
if (err) {
console.log(err);
req.session.flash = {
err: err.ValidationError
}
return res.redirect('/');
}
res.redirect('/user/show/'+ user.id);
//res.json(user);
});
},
index.ejs现在只是<%- partial ('../user/_signup.ejs') %>
_signup.ejs
<div class="col-sm-12 col-md-12 col-lg-12" style="max-width:400px;">
<h1>Sign up</h1>
<form action="/user/create" method="post" role="form" class="form-signin">
<% if(flash && flash.err) { %>
<ul class="alert alert-success">
<% Object.keys(flash.err).forEach(function(err) { %>
<li> <%- JSON.stringify(flash.err[err]) %></li>
<% }) %>
</ul>
<% } %>
<div class="form-group control-group">
<label for="email"></label>
<input name="email" class="form-control" placeholder="Email" type="text"/>
</div>
<div class="form-group control-group">
<label for="password"></label>
<input name="password" class="form-control" placeholder="Password" id="password" type="password" title="Password"/>
</div>
<div class="form-group control-group">
<label for="passwordConfirmation"></label>
<input name="passwordConfirmation" class="form-control" placeholder="Confirm Password" type="password" title="Password"/>
</div>
<input type="submit" value="Signup" class="btn btn-success"/>
<input type="hidden" name="_csrf" value="<%= _csrf %>"/>
</form>
答案 0 :(得分:2)
部分应该可以访问您在渲染视图时发送的任何本地人,所以看起来其他东西可能会在这里发生。无论如何,您可以通过将它们作为第二个参数发送来手动将变量传递给部分:
<%- partial ('../user/new.ejs', {flash: flash}) %>