节点JS同步数据库调用

时间:2015-11-15 21:22:10

标签: javascript node.js express

我是java脚本和nodejs的新手。 我正在尝试编写一个代码来检查数据库中是否已存在电子邮件,如果没有发送错误。 问题是在数据库函数结束之前,我的代码转到下一行,导致未定义的变量(emailExists)

这是我注册的代码:

app.post('/signUpWeb', function (req, res) {
  var reqBody = req.body;
  var email= reqBody.email;
  var password= reqBody.password;
  var fullName= reqBody.fullName;
  var webDbInsertion  = {email: email, password: password, fullName: fullName};

  var emailExists= DButils.checkIfPKexists(connection, "webusersMail", "email", webDbInsertion.email);

  if(emailExists == false){
    DButils.insertInfoToDB(connection, "webusersMail" ,webDbInsertion);
    console.log("successfull signup");
    res.send("successfull signup");
  }else{
    console.log("signup failed, email: " + email + " allready exits");
    res.send("signup failed");
  }
  res.end();
});

这是我的数据库调用

  exports.checkIfPKexists=  function(dbConnection, tableName, PK, newPK){
    var query = dbConnection.query('select count(*) as mailPkCount from ' +tableName+ ' where ' +PK+ ' = ?', newPK, function (err, row, result) {   
    if (err) {
      console.error(err);
      return;
    }
    var count= row[0].mailPkCount;
    var bool = (count > 0);
    return bool;
    });
  };

1 个答案:

答案 0 :(得分:0)

嗯,你看,node.JS被设计为异步,而你所要求的是不可能的,它会关闭运行服务器实例的事件循环的主线程。

我建议做的是为你的" checkIfPKexists"添加一个回调函数。函数,并以结果作为参数返回,就像在DBConnection.query中一样。然后,您将所有未初始化的代码移动到回调中。

编辑:下面是一个快速的代码示例,根据您的喜好进行调整http://pastebin.com/bEHp4bi2