函数在Node.js中多次调用
问题描述:
我刚刚注意到我的一个函数被多次调用,即使我只使用它一次。该功能是createWallet
。在调用它之后,我最终得到了具有该用户标识的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在LoginController中
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.");
});
});
});
};
最后创建小工具
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;
});
});
};
这是为什么发生?
答
我已经修改了一下你的代码给一个想法,也将解决你的多重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你不是验证多次也会创建多个钱包。 – Shaharyar
我看不到任何错误。也许Chrome(如果您使用的是)预先获取网址,那么您可能会点击两次。尝试使用不同的浏览器,或者使用'curl'命中该网址。 – Adam
您是否确认具体是指多次调用一个函数,而不是路由或控制器? – JJJ