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