Вярвам, че не допускате неблокиращия характер на тези обаждания. Променливата е настроена на false, връзката се извиква и след това пропада в очакване на обратно повикване. Веднага извеждате отговора, преди да завърши обратното повикване.
module.exports = function(app){
app.get('/register/check/u/:username', function(req, res){
// you set the value of the output var
var output = 'false';
// this is a non-blocking call to getConnection which fires the callback you pass into it, once the connection happens. The code continues on - it doesn't wait.
pool.getConnection(function(err, conn) {
query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
query.on('error', function(err){
throw err;
});
query.on('result', function(row){
var output = 'true';
console.log(row.email);
console.log(output);
});
conn.release();
});
// you are getting here before the callback is called
res.render('register/check_username', { output: output});
});
);
Защо получавате правилната стойност в конзолата? Защото в крайна сметка обратното извикване се извиква и изпълнява това, което очаквате. Извиква се просто след res.render
Това е по-вероятно кодът, който искате:
module.exports = function(app){
app.get('/register/check/u/:username', function(req, res){
pool.getConnection(function(err, conn) {
query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
query.on('error', function(err){
throw err;
});
query.on('result', function(row){
var output = 'true';
console.log(row.email);
console.log(output);
res.render('register/check_username', { output: output});
});
conn.release();
});
});
);