[英]node.js flow not correct when getting data from mysql database
我正在使用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的工作方式有關?
connection.query
是異步的,因此您必須使用回調函數來處理查詢的結果。
這是你的代碼略有修改:
API路線:
app.post('/getJson', function (req, res) {
fetchData(req.body.selectpicker, function(jsonata) {
console.log('jsonData' + jsonData);
res.render('result.ejs', {
html: '<p>' + jsonData + '</p>'
});
});
});
fetchdata函數:
function fetchData(tableName, done)
{
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;
connection.query(query, function(err, rows, fields)
{
if (err) throw err;
console.log('The rows are: ', rows);
done(rows);
});
connection.end();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.