为什么我无法获得查询结果

时间:2019-07-05 15:00:19

标签: mysql node.js express

我将sql查询和路由器文件分成两个,试图应用MVC概念。但是,为什么我可以传递查询结果?现在不起作用,控制台会打印“ unefine”而不是结果

//homeapi.js under folder api
var mysql = require('../conf/db');
let getAll = {};
getAll.all = () => {
    var userGetSql = 'SELECT * FROM product';
    mysql.query(userGetSql, (err, results) => {
      if (err) {
        return ;
      }
      return results;
    })
}

let info = getAll.all();
console.log(info)

module.exports = getAll;

//index.js under routers file,  I try to import it, but also failed
var getAll = require('../api/homeapi');
router.get('/product', (req,res,next) => {
  res.json(getAll.all());
});

1 个答案:

答案 0 :(得分:1)

NodeJS是异步工作的,这意味着当您调用res.json(getAll.all());时,将在查询执行结束之前执行res.json。

正确的方法是:
1.您的getAll函数应该从外部获取回调(就像mysql函数一样)
2.路由器函数应将回调传递给getAll,并将结果传递给响应

getAll.all = (callback) => {
    var userGetSql = 'SELECT * FROM product';
    mysql.query(userGetSql, callback);
}

router.get('/product', (req,res,next) => {
  getAll.all((result, err) => {
    if (err) {
       return res.json('some error message');
    }
    return res.json(result);
  });
});