我将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());
});
答案 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);
});
});