【问题标题】:How to fix a errors messages problem with NODEJS如何解决 NODEJS 的错误消息问题
【发布时间】:2019-06-29 14:58:15
【问题描述】:

我在注册表格时遇到问题,当我点击提交并完成所有字段并且电子邮件(已经在数据库中)时,表格被重置,然后第二次点击错误消息(电子邮件已经在数据库中并且其他味精...)出现..什么问题?


router.post('/register', function(req, res) {
  var name = req.body.name;
  var email = req.body.email;
  var username = req.body.username;
  var password = req.body.password;
  var password2 = req.body.password2;

  req.checkBody('username', 'Veuillez renseigner un identifiant').notEmpty();
  req.checkBody('email', 'Veuillez renseigner une adresse email valide').isEmail();
  req.checkBody('password', 'Veuillez renseigner un mot de passe').notEmpty();
  req.checkBody('password2', 'Les mots de passe ne correspondent pas').equals(req.body.password);

  var errors = req.validationErrors();

  if(errors) {
    res.render('register', {errors:errors});
  } else {
    User.findOne({ email: email }).then(user => {
      if (user) {
        req.flash('error_msg','EMAIL ALREADY IN DB');
        res.render('register', {errors:errors});
  } else {
    var newUser = new User({
      email: email,
      username: username,
      password: password
    });
      User.createUser(newUser, (err,user) => {
        if(err) throw err;
        console.log(user)
      })
      req.flash('success_msg','u can now log u account is created')
      res.redirect('/users/login') 
      }
    });
  }
});

感谢您的帮助:)

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    似乎您没有等待 createUser 回调函数在您之前响应 验证一切是否成功。

    【讨论】:

      【解决方案2】:

      如 GisliBG 所示,您必须等待 CreateUser 回调;这意味着,您需要将 createUser 完成工作后需要执行的代码放在回调中:这是异步代码的一般规则/行为:

      试试这个:

      User.createUser(newUser, (err,user) => {
              if(err) throw err;
              console.log(user);
      
              req.flash('success_msg','u can now log u account is created');
              res.redirect('/users/login');
            })
      

      【讨论】:

      • 同样的事情 :( 表单值消失,我需要再次单击才能出现错误
      • 你能在 req.flash('error_msg','EMAIL ALREADY IN DB') 之前放一个 console.log('something'); findOne 似乎第一次没有找到用户
      • 我认为是 req.flash 的问题,我该如何替换它? console.log 工作!
      【解决方案3】:

      更新!它像这样工作,但是当我输入重复的电子邮件而不是密码时,只有电子邮件错误消息,除此之外的所有工作

      这是我的注册文件

      {{#if errors}}
        {{#each errors}}
          <div class="alert alert-danger">{{msg}}</div>
        {{/each}}
      {{/if}}
      {{#if error}}
        {{#each error}}
          <div class="alert alert-danger"></div>
        {{/each}}
      {{/if}}
      
      <h2 class="page-header">Register</h2><br>
      <form action="/users/register" method="post">
        <div class="form-group">
          <label for="username">Username</label>
          <input type="text" class="form-control" placeholder="Username" name="username">
          </label>
        </div>
        <div class="form-group">
          <label for="email">Email</label>
          <input type="text" class="form-control" placeholder="Email" name="email">
          </label>
        </div>
        <div class="form-group">
          <label for="password">Password</label>
          <input type="password" class="form-control" placeholder="Password" name="password">
          </label>
        </div>
        <div class="form-group">
          <label for="password2">Confirm Password</label>
          <input type="password" class="form-control" placeholder="Password" name="password2">
          </label>
        </div>
        <button class="btn btn-primary" type="submit">Submit</button>
      </form>
      

      还有我的 users.js 文件(未满)

      router.post('/register', function(req, res) {
        var name = req.body.name;
        var email = req.body.email;
        var username = req.body.username;
        var password = req.body.password;
        var password2 = req.body.password2;
      
        req.checkBody('username', 'Veuillez renseigner un identifiant').notEmpty();
        req.checkBody('email', 'Veuillez renseigner une adresse email valide').isEmail();
        req.checkBody('password', 'Veuillez renseigner un mot de passe').notEmpty();
        req.checkBody('password2', 'Les mots de passe ne correspondent pas').equals(req.body.password);
      
        var errors = req.validationErrors();
        var error = 'email not available'
      
        if(errors) {
          res.render('register', {errors: errors})
        } else {
          User.findOne({ email: email })
            .then(user => {
              if(user) {
                //USER EXIST
                res.render('register', {errors: errors, error: error})
              } else {
                var newUser = new User({
                  email: email,
                  username: username,
                  password: password
              });
              User.createUser(newUser, (err,user) => {
                if(err) throw err;
                console.log(user);
      
                req.flash('success_msg','u can now log u account is created');
                res.redirect('/users/login');
              })
              }
            })
          }
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-16
        • 2015-05-18
        • 2021-11-03
        • 2021-02-08
        • 2020-12-11
        • 2014-12-24
        • 1970-01-01
        • 2020-05-29
        相关资源
        最近更新 更多