मेरा मानना है कि आप इन कॉलों की गैर-अवरुद्ध प्रकृति की अनुमति नहीं दे रहे हैं। वेरिएबल को गलत पर सेट किया जाता है, कनेक्शन को कॉल किया जाता है और फिर कॉल बैक लंबित होने के माध्यम से गिरता है। कॉल बैक पूरा करने से पहले, आप तुरंत प्रतिक्रिया प्रस्तुत करते हैं।
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();
});
});
);