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

时间:2016-08-11 08:42:27

标签: javascript node.js

我从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();

};

如何返回要渲染的查询数据?

1 个答案:

答案 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) {
     ...
  });
});