Javascript 从mysql数据库获取数据时node.js流不正确

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>'

我正在使用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>'
    });
});
但我的问题是,当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();
}