आप result
लौटा रहे हैं और क्वेरी से पहले कनेक्शन बंद करने से डीबी से इसका मूल्य वापस आ गया है। उस कोड को कॉलबैक के अंदर रखें।
अपना कोड ठीक करते हुए, यह इस तरह दिखना चाहिए:
function callDatabase(id) {
var result;
var connection = mysql.createConnection(
{
host : '192.168.1.14',
user : 'root',
password : '',
database : 'test'
}
);
connection.connect();
var queryString = 'SELECT name FROM test WHERE id = 1';
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
for (var i in rows) {
result = rows[i].name;
}
connection.end();
return result;
});
}
हालांकि, यह समस्या का केवल एक हिस्सा ही हल करेगा, क्योंकि अब भी आप response.end(callDatabase(id));
को कॉल कर रहे हैं। प्रश्न से प्रतिक्रिया की प्रतीक्षा करने से पहले।
इसे ठीक करने के लिए, आपको किसी प्रकार का कॉलबैक वापस करना होगा।
function callDatabase(id, callback) {
// the method code here...
connection.query(queryString, function(err, rows, fields) {
// code...
// instead of returning the result, invoke the callback!
callback(rows);
});
}
अब आप इसे इस तरह कह सकते हैं:
request.on('data', function (chunk) {
var json = JSON.parse(chunk);
var id = parseInt(json["id"]);
callDatabase(id, function(res) {
response.end(res);
});
});