Запрос будет выполнен асинхронно. Поэтому, если вы выполните функцию, stat будет возвращен ДО того, как будет выполнен обратный вызов con.query(...)
. Поэтому stat всегда равен 0.
function confirm(uname, pass){
var query = "select * from clients where name='"+uname+"' ";
var stat = 0;
con.query(query, function(err, result){
// This is executed delayed. return is already called.
if(err) throw err;
if(result.length<1){
stat=4;
}
var password = result[0].password;
if(password === pass){
console.log('verified');
stat=1;
}
if(password != pass){
stat=2;
}
});
return stat;
}
Чтобы решить эту проблему, вы должны использовать обратный вызов самостоятельно:
function confirm(uname, pass, cb){
var query = "select * from clients where name='"+uname+"' ";
var stat = 0;
con.query(query, function(err, result){
if(err) return cb(err);
if(result.length < 1){
stat=4;
}
var password = result[0].password;
if(password === pass){
console.log('verified');
stat=1;
}
if(password != pass){
stat=2;
}
cb(null, stat);
});
}
И назовите это так:
confirm("<username>", "<pw>", function(error, stat) {
if (error)
{
// do error routine
} else {
// all fine, stat is set, no error thrown
}
}