簡體   English   中英

從mysql數據庫獲取數據時,node.js流不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM