nswbmw / N-club

使用 Koa + MongoDB + Redis 搭建论坛系统
515 stars 107 forks source link

请问你这个项目的flash是怎么传到ejs里的? #10

Closed hezhongfeng closed 8 years ago

hezhongfeng commented 8 years ago

我自己在使用koa2搭建类似你这个项目 目前遇到的问题是不知道怎么把flash和session传到ejs 找了下,有人这么做的 res.locals.flash = req.flash();就可以在ejs里面用flash了 但是ctx.res已经没有locals了~ 看你的代码也不知道究竟在哪里重定向 在ejs里引用也应该和koa1不同~

hezhongfeng commented 8 years ago

例如get登录界面的话,这里是直接返回页面 exports.get = function* () { yield this.render('signin'); }; 那么为什么ejs里面没有报错~

          <% if ($this.session.user) { %>
            <a href="/logout" class="item">登出</a>
          <% } else { %>
            <a href="/signup" class="item">注册</a>
            <a href="/signin" class="item">登录</a>
          <% } %>

    <% if ($this.flash && $this.flash.error) { %>
      <div class="flash">
        <div class="ui red message"><i class="close icon"></i><%= $this.flash.error %></div>
      </div>
    <% } %>
hezhongfeng commented 8 years ago

我也成功了 先把flash变量传进去await ctx.render('signin', {title: '登录界面',flash: ctx.flash.get()}); post验证之后在更新

  if (data.password !== dbpassword) {
    ctx.flash.set({error:'账户或密码错误',error1:'账户或密码错误111111111111'});
    return await ctx.redirect('back',{flash: ctx.flash.get()});
  }

这里比你的多了一步,就是需要在更新之前将flash传进去 不知道你为什么不传进去也不会报错(或者说我没找到在哪里传的)