对在koa2使用ejs的一些疑问
借鉴N-club这个项目做用户登录,原作使用koa1,我是用的koa2 刚开始访问登录界面 直接返回登录界面
yield this.render('signin');
在登陆页面,想在ejs中显示登陆错误的信息,正确就不显示了,因为要跳转了 下面的意思是当用户验证错误的话,就输出这个信息,返回这个界面
this.flash = {error: '用户名或密码错误!'};
return this.redirect('back');
下面是ejs里面的
<% if ($this.flash && $this.flash.error) { %>
<div class="flash">
<div class="ui red message"><i class="close icon"></i><%= $this.flash.error %></div>
</div>
<% } %>
我的疑问是,为什么我在第一次get的时候不能返回正常的html 后来找到原因是因为ejs里面的这段代码 我很奇怪,为什么原作的可以正常解析返回html,我的就不行~
4 回复
啊啊啊~
发现问题所在市怎么把flash传到ejs里面,一直没有成功 有人说这样的 res.locals.flash = req.flash();就可以在ejs里面用flash了 但是ctx.res已经没有locals这个值了~
我所用过的所有框架中, redirect重定向就是完全重定向, 不会接受你在重定向前传的任何值, 本来redirect重定向的http返回码就是302,规定不会转发任何东西,比如header中的token之类的也都会被忽略, 你应该直接渲染back
这个页面,而不是重定向过去
@Smallpath 应该是可以的,下面是原作对表单提交的处理,逻辑还是很清晰的,待我找到正确的方法吧~
exports.post = function* () {
var data = this.request.body;
var userInfo = yield $User.getUserByName(data.name);
if (!userInfo || (userInfo.password !== data.password)) {
this.flash = {error: '用户名或密码错误!'};
return this.redirect('back');
}
this.session.user = {
name: userInfo.name,
email: userInfo.email
};
this.flash = {success: '登录成功!'};
this.redirect('/user/' + userInfo.name);
};