函数在Node.js中被多次调用

时间:2016-07-05 17:53:21

标签: javascript mysql

我注意到我的一个函数不止一次被调用,即使我只使用它一次。该函数是createWallet。在调用它之后,我最终得到了具有该用户ID的2-5个钱包的数据库。

我们的想法是为刚刚激活帐户的用户创建一个“钱包”,这是代码:

路线

app.get('/api/activateAccount', function(req, res){
      var mail = req.query.mail;
      var db = require('../controllers/loginController');
      db.activateAccount(mail, function(result){
           res.json(result);
      });
 });

LoginController上的函数activateAccount

exports.activateAccount = function(mail, callback){

pool.getConnection(function(err, connection){
  if(err){
    console.log(err);
    callback(true);
    return;
  }

  connection.query("UPDATE usuarios SET activo = 1 WHERE correo = ?", [mail], function(err, results) {
      result = results;

      if(err){
        console.log(err);
      }

        connection.query("SELECT id_usuario AS id FROM usuarios WHERE correo = ?", [mail], function(err, results) {
        result = results;

        if(err){
          console.log(err);
        }
        connection.release();

        createWallet(result[0].id); //this is the only place i call createWallet

        callback("Thank you for confirming your mail you can now Log In with your account.");

        });
    });
  });
};  

最后是createWallet

function createWallet(id_usuario){
var new_wallet = {
  id_usuario: id_usuario,
  coins: 0
};

var string = "NULL";
pool.getConnection(function(err, connection){
  if(err){
  console.log(err);
    callback(true);
    return;
  }

    connection.query('INSERT INTO usuarios_citypoints SET ?', new_wallet, function(err, results){
      connection.release();
      if(err) { 
        console.log(err); 
        callback(true); 
        return; 
      }

      return;
    });
  });
}; 

为什么会这样?

1 个答案:

答案 0 :(得分:0)

我修改了一下你的代码以提出一个想法,它也将解决你的多个wallet创建问题:

exports.activateAccount = function(mail, callback){

pool.getConnection(function(err, connection){
  if(err){
    console.log(err);
    callback(true);
    return;
  }

    connection.query("SELECT id_usuario AS id FROM usuarios WHERE activo = 0 AND correo = ?", [mail], function(err, user) {
    //connection.query("UPDATE usuarios SET activo = 1 WHERE correo = ?", [mail], function(err, results) {

      if(err){  //check error
        console.log(err);
      }
      else if(user == null) {   //if user not exists
         callback("user not found");
      }
      else if(user[0].activo == 1) {    //if already activated
        callback("already activated");
      }

        connection.query("UPDATE usuarios SET activo = 1 WHERE correo = ?", [mail], function(err, user_activated) {

        if(err){
          console.log(err);
        }
        else if(user_activated.changedRows == 0) { //if no row was updated
            callback("unknown error while updating");
        }
        connection.release();

        createWallet(user[0].id); //this is the only place i call createWallet

        callback("Thank you for confirming your mail you can now Log In with your account.");

        });
    });
  });
};