[英]Return query data to render in ejs node js
I'm retrieving data from mysql db and I need to send data to render in my ejs file. 我正在从mysql db中检索数据,我需要在我的ejs文件中发送数据进行渲染。
router.get('/', function(req, res, next) {
res.render('index', { speedAccelData: getSpeedAccelData() });
});
module.exports = router;
Following is the function which I used to get data from database. 以下是我用来从数据库中获取数据的函数。 It successfully prints
jsonStr
with required data. 它成功地打印了所需数据的
jsonStr
。 I need to return jsonStr
from the function. 我需要从函数返回
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();
}; };
How can I return query data to render? 如何返回要渲染的查询数据?
You can use Promise to achieve this 您可以使用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;
};
Then in your controller you can proceed like this : 然后在您的控制器中,您可以这样继续:
router.get('/', function(req, res, next) {
getSpeedAccelData()
.then(function success(result) {
res.render('index', { speedAccelData: result });
}, function error(error) {
...
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.