代码之家  ›  专栏  ›  技术社区  ›  William

快速验证、自定义异步检查

  •  0
  • William  · 技术社区  · 6 年前

    所以,我在这方面做了大量的研究,我有一些问题。

    router.post('/register', async (req, res) => {
    const newUser = await usersDb();
    // Define the user
    const email = req.body.email;
    const username = req.body.username;
    const password = req.body.password;
    const confirmPassword = req.body.confirmPassword;
    
    // Start user already exist check
    let userNameCheck = await newUser.findOne({ 'username': username});
    
    req.check('email', 'Email is not valid.').isEmail()
      .custom(async value => {
        let emailCheck = await newUser.findOne({ 'email': value });
        console.log(emailCheck);
        console.log('Hmmm')
        if (emailCheck !== null) {
          return true;
        } else {
          return false;
        }
      }).withMessage('Email is already in use.');
    
    //req.check('username', 'Username is required.').notEmpty();    
    req.check('password', 'Password is required.').notEmpty();
    req.check('confirmPassword', 'Confirm password is required.').notEmpty();
    
    // Get errors
    let errors = await req.validationErrors();
    if (errors) {
       console.log(errors);
       res.render('index', {
        errors: errors
      });
    } else {     
      console.log('Still bad');
    }
    });
    

    我的邮件检查有问题。它似乎在很大程度上起作用,但并没有返回错误。我知道我使用的是同一封电子邮件,而且它正在正确地提取它。但这种验证不起作用。有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  12
  •   William    6 年前

    好吧,这次我真的成功了:

    req.check('email', 'Email is not valid.').isEmail()
      .custom(async value => {
        let emailCheck = await newUser.findOne({ 'email': value });
        if (emailCheck !== null) {
          console.log('User Exists');
          return Promise.reject();
        }
    }).withMessage('Email is already in use.');
    

    以及:

    // Get errors
    const errors = await req.getValidationResult();
    console.log(errors.mapped())
    if (!errors.isEmpty()) {
       res.render('index', {
        errors: errors.mapped()
      });
    } else {     
      console.log('Still bad');
    }
    
        2
  •  7
  •   Cybersupernova    5 年前

    是的,威廉,你的回答完全正确,我只是想为其他好奇的人补充一下原因。

    如果我们使用 asyncFunction 在自定义验证器中,我们必须返回 Promise 对象 当验证工作时,我们不需要函数中的任何东西,因此在无效情况下工作,但是 return false 不起作用,但 Promise.reject()

    此外,你可以使用 Promise.resolve() 完全更正代码。