Ich glaube, Sie berücksichtigen nicht die nicht blockierende Natur dieser Anrufe. Die Variable wird auf "false" gesetzt, die Verbindung wird aufgerufen und fällt dann bis zum Rückruf durch. Sie geben die Antwort sofort aus, bevor der Rückruf abgeschlossen ist.
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});
});
);
Warum erhalten Sie den richtigen Wert in der Konsole? Denn schließlich wird der Callback aufgerufen und führt das aus, was Sie erwarten. Es wird einfach nach res.render
aufgerufenDies ist wahrscheinlich der gewünschte Code:
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();
});
});
);