求助,express+mongoose返回数据给echarts遇到问题
发布于 8 年前 作者 mmqhh 4589 次预览 最后一次回复是 8 年前 来自 问答
router.get('/chart', function (req, res, next) {
let department = [];
stations.aggregate([{$group:{_id:"$dept",count:{$sum:1}}}]).exec((err,doc)=>{
department.push(doc);
});
res.json(department);
});
代码如上,我想查询stations集合里各个部门的数量,push进一个数组然后返回给Echarts的柱状图,可是前端拿到的却是空的数组。通过调试,数据是查到了,可是到了res.json(department)这一步,department数组就变成空的了,请教这个问题该如何解决?
13 回复
看看异步回掉
我把res.json(department)放进mongoose的回调里就解决了耶 但是,除此之外还有什么其他解决方法吗?
这三行代码的执行顺序的问题.应该是按照我注释里的顺序运行的.第二行是异步的啊 大兄弟. 可以看看
async.async await
@mmqhh https://github.com/five6/express-mongoose-others/blob/master/controllers/user/user.api.js
这是我想出的另一种解决办法,大神们看看OK嘛
老哥 你应该吧
res.json(department);放在exec((err,doc)=>{ department.push(doc); })吧老哥,你没理解nodejs的异步非阻塞。
你试试这样 @mmqhh router.get(’/chart’,async function (req, res, next) { res.json(await stations.aggregate([{$group:{_id:"$dept",count:{$sum:1}}}])); });
不用promise也可以.但是还是得学
mark
alert(1)@guo-q 这个好,学习了
能用8.X还是拥抱async await最爽~