2016-07-05 5 views
1

방금 ​​한 번 사용한 경우에도 내 함수 중 하나가 두 번 이상 호출되었습니다. 이 기능은 createWallet입니다. 그것을 호출 한 후에는 해당 사용자 ID로 2-5 개의 지갑이있는 데이터베이스로 끝납니다.Node.js에서 함수가 두 번 이상 호출됩니다.

경로

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); 
     }); 
}); 

기능 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."); 

     }); 
    }); 
    }); 
}; 

인 LoginController

에서 :

아이디어는 그의 계정을 활성화 사용자에 대한 하나의 "지갑"을 만드는 것입니다, 여기에 코드입니다 그리고 마지막으로 지갑을 만듭니다.

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; 
    }); 
    }); 
}; 

왜 이런 일이 발생합니까?

내가 아이디어를 제공하기 위해 약간에게 코드를 수정 한
+2

여러 번 여러 지갑을 만들 것입니다. – Shaharyar

+1

나는 틀린 아무것도 볼 수 없다. 어쩌면 크롬 (당신이 그것을 사용하는 경우)은 URL을 미리 가져 오기 때문에 두 번 칠 수도 있습니다. 다른 브라우저를 사용하거나 URL을 치기 위해 '컬 (curl)'을 사용하십시오. – Adam

+2

경로 또는 컨트롤러가 아니라 여러 번 호출되는 기능 중 하나임을 확인 했습니까? – JJJ

답변

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."); 

     }); 
    }); 
    }); 
}; 
사용자가 이미 URL을 호출, 활성화되지 않거나은 검증하지 않는
관련 문제