简体   繁体   English

返回要在ejs节点js中呈现的查询数据

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

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