Javascript 从mysql数据库获取数据时node.js流不正确
我正在使用Node.js、Express和EJS开发一个小程序 基本上,我有一个后api路线,如下所示:Javascript 从mysql数据库获取数据时node.js流不正确,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在使用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>'
app.post('/getJson', function (req, res) {
var jsonData = fetchData(req.body.selectpicker);
console.log('jsonData' + jsonData);
res.render('result.ejs', {
html: '<p>' + jsonData + '</p>'
});
});
但我的问题是,当connection.query第一次运行时,它不会进入回调函数,而是直接进入connection.end()。但是,在它退出fetchData函数之后,它会运行回调函数,返回查询后的行
有什么想法吗
我认为这可能与api的工作方式有关。连接。查询是异步的,因此您必须使用回调函数来处理查询结果 以下是您的代码稍微修改: 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>'
});
});
});
NodeJS是一种事件驱动编程,因此它遵循事件序列
app.post('/getJson', function (req, res) {
fetchData(req.body.selectpicker, function(jsonata) {
console.log('jsonData' + jsonData);
res.render('result.ejs', {
html: '<p>' + jsonData + '</p>'
});
});
});
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();
}