Node.js 登记表

Node.js Registration Form

我正在尝试在我的网络应用程序中实施注册表单。一旦我将用户提供的 'name' 和 'email' 插入我的数据库 (Mysql)。如果 'name' 或 'email' 已经在使用中,我需要 单独的 错误消息在注册表单上弹出,像

"the 'name' is already in use"

"the 'email' is already in use"

问题是我使用从 Mysql 得到的错误来显示消息

"the 'name' or 'email' is already in use"

我的问题是如何使用 Mysql 错误来区分被复制的是 'name' 还是 'email'。

app.post(myArgs[0]+"/register", function(req,res){
      con.query('insert into users values(UUID(),\'' + req.body.user + '\',\''+req.body.pass+'\',\''+req.body.mail+'\',NULL)',function(err,res){
        if(err){
            console.error(err+"  Ooops name or email already in use !"); //here is where I want to find out whether it is the name or the email that is already in use! 
            errorregister();
          return;
        } else {
            passregister();
        }
      })
    function errorregister(){
      res.redirect(myArgs[0]+"/register");
      console.log(_dict);
    }
    function passregister(){
      res.redirect(myArgs[0]+"/login");
      console.log(_dict);
    }
  });

在数据库给你一个插入错误后,你知道 emailname,或两者都是重复的。

然后您可以在数据库中搜索 name,然后搜索 email

之后,自定义错误消息就很容易了。

插入前的检查可能会在竞争条件的情况下出错(两个用户试图同时注册相同的 name/email)。插入后,你肯定知道有重复的东西。

插入 MySQL(List of error codes)

时检查错误 1586

您可以检查 INSERT 发生的错误。

只要在 UNIQUE KEY 列中插入重复键,就会返回此错误。基于此错误,您可以向客户端发送 AJAX response,这将更新 DOM 以显示所需的错误。

好的,我就是这样完成的

app.post(myArgs[0]+"/register", function(req,res){
      con.query('insert into users values(UUID(),\'' + req.body.user + '\',\''+req.body.pass+'\',\''+req.body.mail+'\',NULL)',function(err,res){
        if(err){
          error(err);
            return;
        } else {
            passregister();
        }
      })
      function error(err){
        if (err.toString().search("'PRIMARY'") != -1 ){
          console.error("  Ooops!!! name duplicated"); 
          res.redirect(myArgs[0]+"/register")
        } else {
            console.error("  Ooops!!! email duplicated");
            res.redirect(myArgs[0]+"/register")
          }
          return;
      }
    function passregister(){
      _dict[req.body.user]={};
      res.redirect(myArgs[0]+"/login");
      console.log(_dict);
    }
  });