Tôi tin rằng bạn không cho phép tính chất không chặn của những cuộc gọi này. Biến được đặt thành false, kết nối được gọi và sau đó chuyển sang trạng thái chờ gọi lại. Bạn ngay lập tức hiển thị phản hồi, trước khi cuộc gọi lại hoàn tất.
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});
});
);
Tại sao bạn nhận được giá trị phù hợp trong bảng điều khiển? Vì cuối cùng cuộc gọi lại được gọi và thực hiện những gì bạn mong đợi. Nó chỉ được gọi sau res.render
Có nhiều khả năng là mã bạn muốn:
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();
});
});
);