req.session.flash = {} не работает sails.js - PullRequest
0 голосов
/ 05 мая 2018

Я действительно новичок в sails.js и сейчас использую паруса 1.0. У меня возникает проблема, когда я пытаюсь проверить свою страницу регистрации, что, как только форма становится недействительной, сообщение об ошибке отображается над формой, как и ожидалось, но когда я делаю обновление, оно все еще там. Кроме того, все в порядке.

Маршрутизация выполняется вручную, и я думаю, что проблема здесь req.session.flash = {}; в api/controllers/UsersController.js, который не является пустым объектом !!

апи / контроллеры / UsersControllers.js

module.exports = {

    signup:function(req,res,next){
        res.locals.flash = _.clone(req.session.flash);
        res.view('pages/signup');
        req.session.flash = {};
    },

    create:function(req,res,next){
        var values = req.allParams();
        Users.create(values).exec(function(err,user){
            // if there's an error
            if(err){
                console.log(err);
                req.session.flash = { 
                    err: err 
                }

            // if error redirect back to signup page
            return res.redirect('/users/signup');
            }

            //  After successfully creating the user
            // redirect to the show action

            res.view('pages/create');
            req.session.flash = {};
        });
    }
};

просмотр / страницы / signup.ejs

<div class="container">

    <% if(flash) { %>
      <ul class="alert alert-success">
        <% Object.keys(flash.err).forEach(function(error){ %>
          <li> <%- JSON.stringify(flash.err[error]) %> </li>
        <% }) %>
      </ul>
    <% } %>

  <div class="row login-pannel">
    <div class="col-md-4 col-md-offset-4">
      <div class="panel panel-default">
        <div class="panel-heading login-pannel-heading">
          <h3 class="panel-title"> User Signup </h3>
        </div>
        <div class="panel-body login-pannel-body">

          <form class="login-form" method="post" action="/users/create">

            <div class="form-group">
              <label for="loginUsername">Name</label>
              <input type="text" class="form-control" id="name" name="name" placeholder="Your Name" autofocus>
            </div>

            <div class="form-group">
              <label for="loginUsername">Email address</label>
              <input type="email" class="form-control" id="loginEmail" name="email" aria-describedby="emailHelp" placeholder="Your Email">
              <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
            </div>

            <div class="form-group">
              <label for="loginPassword">Password</label>
              <input type="password" class="form-control" id="pass" name="password" placeholder="Password">
              <label class="text-danger" id="signup-pass"></label>
            </div>

            <div class="form-group">
              <label for="loginPassword">Confirm Password</label>
              <input type="password" class="form-control" id="con-pass" name="conPassword" placeholder="Confirm Password">
              <label class="text-danger" id="signup-con-pass"></label>
            </div>

            <button type="submit" class="btn btn-primary">Submit</button>
            <button type="reset" class="btn btn-danger reset-button">Reset</button>
            <input type='hidden' name='_csrf' value='<%= _csrf %>'>
          </form>

        </div>
      </div>
    </div>
  </div>
</div>

1 Ответ

0 голосов
/ 06 мая 2018

Если моя память не выдает меня, вы должны внести какие-либо изменения в ваш session объект перед отправкой ответа. В вашем api/controllers/UsersControllers.js попробуйте поменять две строки:

res.view('pages/create');
req.session.flash = {};

Должно быть:

req.session.flash = {};
res.view('pages/create');

Подробнее о сессиях здесь . Самое главное там:

Свойство не будет сохранено в хранилище сеансов и недоступно для другие запросы до отправки ответа.

...