Bạn đang trả về result
và đóng kết nối trước khi truy vấn trả về giá trị của nó từ db. Đặt mã đó bên trong lệnh gọi lại.
Đang sửa mã của bạn, nó sẽ trông như thế này:
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;
});
}
Mặc dù, điều này sẽ chỉ giải quyết một phần của vấn đề, vì bây giờ bạn vẫn đang gọi response.end(callDatabase(id));
trước khi đợi phản hồi từ truy vấn.
Để khắc phục điều này, bạn cần trả lại một số loại gọi lại.
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);
});
}
Bây giờ bạn có thể gọi nó như thế này:
request.on('data', function (chunk) {
var json = JSON.parse(chunk);
var id = parseInt(json["id"]);
callDatabase(id, function(res) {
response.end(res);
});
});