Saya yakin Anda tidak mengizinkan sifat non-pemblokiran dari panggilan ini. Variabel disetel ke false, koneksi dipanggil dan kemudian jatuh melalui panggilan balik yang tertunda. Anda segera memberikan tanggapan, sebelum panggilan kembali selesai.
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});
});
);
Mengapa Anda mendapatkan nilai yang tepat di konsol? Karena pada akhirnya panggilan balik dipanggil dan melakukan apa yang Anda harapkan. Itu hanya dipanggil setelah res.render
Ini kemungkinan besar kode yang Anda inginkan:
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();
});
});
);