Node.js、Express、および EJS を使用して小さなプログラムを開発しています。
基本的に、私は次のようにポストAPIルートを持っています:
app.post('/getJson', function (req, res) {
var jsonData = fetchData(req.body.selectpicker);
console.log('jsonData' + jsonData);
res.render('result.ejs', {
html: '<p>' + jsonData + '</p>'
});
});
fetchdata 関数は次のことを行います。
function fetchData(tableName)
{
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'xxxx',
user : 'xxxx',
password : 'xxxx!',
database : 'xxxxx',
port : 'xxxx'
});
connection.connect(function(err) {
console.log('error' + err);
// connected! (unless `err` is set)
});
var query = "SELECT * FROM " + tableName;
var data = [];
connection.query(query, function(err, rows, fields)
{
if (err) throw err;
data = rows;
console.log('The rows are: ', rows);
});
connection.end();
console.log('datsa' + data);
return data;
}
しかし、私の問題は、connection.query が最初に実行されたときに、コールバック関数に入らず、connection.end() に直接進むことです。しかし、fetchData 関数から出た後、クエリの後に行を返すコールバック関数を実行しますか?
何か案は?
APIの動作方法に関係していると思いますか?