NodeJS MySQL检查多个

时间:2017-12-13 21:08:12

标签: mysql node.js

所以,这里的代码导致了一些问题(我现在不会同时检查多个和闪烁的消息,因为我已经迷失了如何单独检查它们)。因此,当我从列表中删除王国和电子邮件时,如果我只使用“rows.length”,它就可以正常工作。我想检查所有三个字段,然后在检查之后再进入注册过程。

已更新

router.post('/register', function(req, res, next){

  const username = req.body.username;
  const kingname = req.body.kingname;
  const email = req.body.email;
  const password = req.body.password;
  const password2 = req.body.password2;


  req.checkBody('username', 'Username is Required').notEmpty();
  req.checkBody('kingname', 'Kingdom Name is Required').notEmpty();
  req.checkBody('email', 'E-Mail is Required').notEmpty();
  req.checkBody('password', 'Password is Required').notEmpty();
  req.checkBody('password2', 'Passwords do not match').equals(password);

  let errors = req.validationErrors();

    db.query('SELECT * FROM users WHERE username = ? OR kingname = ? OR email = ?', [username, kingname, email], function(err, rows){
if(err) {
  console.log(err);
  res.redirect('/');
  return;
} else {
  var rowLength = rows.length;
  for (var i = 0; i < rowLength; i++){
    if(i.username == req.body.username) {
      console.log('Username is Taken');
      req.flash('success', 'Username is taken');
      res.redirect('/');
    } else if (i.email == req.body.kingname) {
      console.log('Kingdome Name Taken');
      req.flash('success', 'Kingdom Name Taken');
      res.redirect('/');
    } else if (i.email == req.body.email) {
      console.log('Email already registered');
      req.flash('success', 'Email already registered');
      res.redirect('/');
    }
  }
}
  });

更新

ERROR:

  for (var = 0; i < rowLength; i++){
           ^
     

SyntaxError:意外的令牌=

好的,所以我最终将其余的代码包括在内,因为我认为这可能是我所做的一些其他事情,也会导致问题。

2 个答案:

答案 0 :(得分:2)

即使设置了错误条件或者没有返回任何行,您也正在处理结果。如果设置了err,请不要尝试访问行。

您还需要迭代行,因为SELECT可以返回多行。不要直接访问rows.username。请使用foreach来检查所有结果。

如果您想要任何列匹配的行,请使用&#39; OR&#39;。

WHERE username = ? OR kigname = ? OR email = ?

您不需要将绑定值作为数组数组传递,只需要传递一个数组。

[username, kingname, email]

答案 1 :(得分:1)

所以,我认为你真的想要检查所有采取的事情并提供一个响应,而不是每个字段的重定向。通过仅选择您关心的实际字段,您的查询也可以稍微优化一下。

此外,在进行现场检查时,您需要检查单个行,而不是行数组。

最后,您应该使用'if'语句而不是'else if',因为您可能同时拥有重复的用户名和重复的电子邮件。

例如,像这样:

 app.get('/p', (req, res)=>{
     if(req.query.p = 1) res.send('hello');
     else res.send('wrong');
    });