我从mysql db中检索数据,我需要在我的ejs文件中发送数据进行渲染。
router.get('/', function(req, res, next) {
res.render('index', { speedAccelData: getSpeedAccelData() });
});
module.exports = router;
以下是我用来从数据库获取数据的函数。它成功打印了jsonStr
所需的数据。我需要从函数中返回jsonStr
。
var getSpeedAccelData = function () {
var jsonStr;
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "db_name"
});
con.connect(function(err){
if(err){
console.log('Error connecting to Db');
return;
}
});
con.query('SELECT * FROM table_name',function(err, result){
if(err) throw err;
jsonStr = JSON.stringify(result)
console.log(jsonStr);
});
con.end();
};
如何返回要渲染的查询数据?
答案 0 :(得分:3)
您可以使用Promise来实现此目标
var getSpeedAccelData = function () {
var promise = new Promise(function (resolve, reject) {
var jsonStr;
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "db_name"
});
con.connect(function(err){
if(err){
console.log('Error connecting to Db');
reject();
}
});
con.query('SELECT * FROM table_name',function(err, result){
if(err) {
reject(err);
} else {
jsonStr = JSON.stringify(result)
resolve(jsonStr);
}
});
con.end();
});
return promise;
};
然后在您的控制器中,您可以这样继续:
router.get('/', function(req, res, next) {
getSpeedAccelData()
.then(function success(result) {
res.render('index', { speedAccelData: result });
}, function error(error) {
...
});
});