【发布时间】:2020-04-18 19:40:02
【问题描述】:
我正在为浏览器中触发的特定 GET 请求开发一个简单的函数。此请求的目的是对 mongodb (mongoose) 数据库进行多次查询,然后对结果执行一些计算和结构格式化以将其发送回浏览器。 唯一的问题是一切耗时太长,导致浏览器出错:
net::ERR_EMPTY_RESPONSE
举一个我试图在这里构建的部分功能的例子:
async function getPriceByMake(makes, id) {
return new Promise(async (resolve, reject) => {
let pMakes = {};
const makesArr = Object.keys(makes);
for (let i = 0; i < makesArr.length; i++) {
console.log('Getting the docs ... ' + Math.round(i/makesArr.length*100) + '%')
const currMake = makesArr[i];
pMakes[currMake] = {};
const modelsArr = Object.keys(makes[currMake]);
for (let j = 0; j < modelsArr.length; j++) {
const currModel = modelsArr[j];
await Listing.find({ catFrom: id, model: currModel }, 'year asking', (err, docs) => {
if (docs.length > 1) {
pMakes[currMake][currModel] = [docs];
} else {
pMakes[currMake][currModel] = {};
}
});
}
}
resolve(pMakes);
});
}
在这个函数中,如果我把async / await 放在外面,我会在另一端得到一个空的{}。这显然不是目标。
我在网上搜索了一下,找到了一个指向这个方案的article:
浏览器:
- 发起请求
- 显示进度
- 显示结果
网络服务器:
- 提交活动
- 检查完成
- 返回结果
BackEndApp:
- 领取活动
- 运行任务
- 返回结果
我的问题如下: 如何使用 NodeJS 和 Express 做到这一点?
【问题讨论】:
标签: node.js express mongoose async-await request