最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

猫鼬

IT培训 admin 4浏览 0评论

猫鼬

免责声明:我是一个新手网络开发者。

我正在创建一个注册页面。有5个输入字段,其中3个(用户名,密码和电子邮件)要求它们通过各种形式的验证。这是代码:

router.post('/register', function (req, res, next) {
user.username = req.body.username;
user.profile.firstName = req.body.firstName;
user.profile.lastName = req.body.lastName;
user.password = req.body.password;
user.email = req.body.email;

User.findOne({email: req.body.email}, function(err, existingEmail) {

    if(existingEmail) {
        console.log(req.body.email + " is already in use")
    } else {
        User.findOne({username: req.body.username}, function(err, existingUsername) {
            if(existingUsername) {
                console.log(req.body.username + " is already in use");
            } else {
                user.validate({password: req.body.password}, function(err) {
                    if (err) {
                        console.log(String(err));
                    } else {
                        user.save(function(err, user) {
                            if (err) {
                                return next(err);
                            } else {
                                return res.redirect('/')
                            }
                        })
                    }
                });
            }
        });
    }
});
});

基本上它首先检查它是否是重复的电子邮件;如果是重复的电子邮件,它会在console.log中说明。如果它不是重复的电子邮件,则它会检查用户名....然后转到密码。

问题是它一次只能做到这一点;如果用户输入了错误的电子邮件和用户名,则只会说电子邮件不正确(不会说电子邮件和用户名都不正确)。

我怎样才能让它同时验证所有3个表格?

回答如下:

您可以使用async并行运行它们,它还可以使您的代码更清晰,并处理该回调地狱:

var async = require('async');

async.parallel([
  function validateEmail(callback) {
    User.findOne({email: req.body.email}, function(err, existingEmail) {
      if(existingEmail) {
        callback('Email already exists');
      } else {
        callback();
      }
    }
  },
  function validateUsername(callback) {
    User.findOne({username: req.body.username}, function(err, existingUsername) {
      if(existingUsername) {
        callback('Username already exists');
      } else {
        callback();
      }
    }
  },
  function validatePassword() {
    user.validate({password: req.body.password}, function(err) {
      if(err) {
        callback(err);
      } else {
        callback();
      }
    }
  }
], function(err) {
    if(err) {
      console.error(err);
      return next(err);
    } else {
      user.save(function(err, user) {
        if (err) {
          return next(err);
        } else {
          return res.redirect('/');
        }
      });
    }
  }
);

这样,数组中的所有验证方法都将并行运行,当所有验证方法都完成后,将保存用户。

猫鼬

免责声明:我是一个新手网络开发者。

我正在创建一个注册页面。有5个输入字段,其中3个(用户名,密码和电子邮件)要求它们通过各种形式的验证。这是代码:

router.post('/register', function (req, res, next) {
user.username = req.body.username;
user.profile.firstName = req.body.firstName;
user.profile.lastName = req.body.lastName;
user.password = req.body.password;
user.email = req.body.email;

User.findOne({email: req.body.email}, function(err, existingEmail) {

    if(existingEmail) {
        console.log(req.body.email + " is already in use")
    } else {
        User.findOne({username: req.body.username}, function(err, existingUsername) {
            if(existingUsername) {
                console.log(req.body.username + " is already in use");
            } else {
                user.validate({password: req.body.password}, function(err) {
                    if (err) {
                        console.log(String(err));
                    } else {
                        user.save(function(err, user) {
                            if (err) {
                                return next(err);
                            } else {
                                return res.redirect('/')
                            }
                        })
                    }
                });
            }
        });
    }
});
});

基本上它首先检查它是否是重复的电子邮件;如果是重复的电子邮件,它会在console.log中说明。如果它不是重复的电子邮件,则它会检查用户名....然后转到密码。

问题是它一次只能做到这一点;如果用户输入了错误的电子邮件和用户名,则只会说电子邮件不正确(不会说电子邮件和用户名都不正确)。

我怎样才能让它同时验证所有3个表格?

回答如下:

您可以使用async并行运行它们,它还可以使您的代码更清晰,并处理该回调地狱:

var async = require('async');

async.parallel([
  function validateEmail(callback) {
    User.findOne({email: req.body.email}, function(err, existingEmail) {
      if(existingEmail) {
        callback('Email already exists');
      } else {
        callback();
      }
    }
  },
  function validateUsername(callback) {
    User.findOne({username: req.body.username}, function(err, existingUsername) {
      if(existingUsername) {
        callback('Username already exists');
      } else {
        callback();
      }
    }
  },
  function validatePassword() {
    user.validate({password: req.body.password}, function(err) {
      if(err) {
        callback(err);
      } else {
        callback();
      }
    }
  }
], function(err) {
    if(err) {
      console.error(err);
      return next(err);
    } else {
      user.save(function(err, user) {
        if (err) {
          return next(err);
        } else {
          return res.redirect('/');
        }
      });
    }
  }
);

这样,数组中的所有验证方法都将并行运行,当所有验证方法都完成后,将保存用户。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论