繁体   English   中英

如何从Node.js中的mySQL查询返回JSON对象

[英]How to return a JSON object from a mySQL query in node.js

我对编码和node.js尤其陌生,所以这可能是一个愚蠢的问题-但我为mySQL数据库查询而阅读的所有示例都只是将查询结果记录到控制台中...我想做的(或至少我想做的事情)返回查询结果作为函数的乘积,这样我就可以允许我的.ejs文件使用JSON对象。

不管我尝试什么,此刻情况都是如此。我的.ejs文件将getDriver()的产品接收到“ Hello World”。 我希望它接收“行”(即SQL查询返回的JSON对象)

我可以在控制台中看到JSON结果,而且看起来很完美。.我似乎无法使其在功能之外“存在” :(

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
/* GET about page. */
router.get('/', function(req, res, next) {
    res.render('SQLtest', { title: 'SQL test',
                        result: getDriver() // I want this to be my JSON object
    });
});

module.exports = router;


function getDriver() {
    var result = "Hello World"; // my .ejs see's this
        var connection = mysql.createConnection(
            {
                host: 'localhost',
                user: 'root',
                password: 'password',
                database: 'my database',
                port: 3306
            }
        );

        connection.query("SELECT * FROM my_table",
            function (err, rows) {
                if (err) {
                console.log(err);
                }

                console.log(rows); // query result looks fine as JSON object
                result = rows; // now change "Hello World" to the JSON object
            }
        );
    return result; // however this still = "Hello World"  :(
}

该数据库查询是一个异步调用-这意味着return result的语句可以执行之前返回查询结果和值result通过更新result = rows

您需要做的是在getDriver函数中引入一个回调函数作为参数。 然后,您的代码将如下所示(我将数据库连接代码移出了getDriver函数):

//You should move this out of the function - you want to set it once
 var connection = mysql.createConnection(
     { host: 'localhost',
       user: 'root',
       password: 'password',
       database: 'my database',
       port: 3306
     });

function getDriver(callback) {    
        connection.query("SELECT * FROM my_table",
            function (err, rows) {
                //here we return the results of the query
                callback(err, rows); 
            }
        );    
}

现在,这就是调用getDriver函数的方式:

router.get('/', function(req, res, next) {   
    //now you can call the get-driver, passing a callback function
    getDriver(function (err, driverResult){ 
       //you might want to do something is err is not null...      
       res.render('SQLtest', { 'title': 'SQL test',
                        'result': driverResult});

    });
});

试试看,让我知道它是否有效。 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM