【发布时间】:2022-01-11 03:47:02
【问题描述】:
所以我正在学习 Udemy 的课程,学习使用 Node/Express/MongoDB 和使用 mongoose 与数据库交互的 Web 开发。
我参加了一个讲座,讲师开始解释如何查询数据库,所以这里创建了一个猫鼬模型并将其命名为Tour,并在控制器文件中编写了这个来查询数据我们已经像这样导入了:
exports.getAllTours = async (req, res) => {
try {
const queryObj = { ...req.query };
const exludedFields = ["sort", "limit", "page", "fields"];
exludedFields.forEach(el => delete queryObj[el]);
const query = Tour.find(queryObj);
const tours = await query
res.status(200).json({
status: 'success',
data: {
tours: tours
}
})
} catch (err) {
res.status(404).json({
status: 'fail',
message: err.message
});
}
}
从上面的代码中可以看出,我们使用处理函数getAllTours 来获取所有通过它处理这条路线app.get('/api/v1/tours/') 的方式。
在讲座开始时,查询代码是这样的:const query = await Tour.find(queryObj);,然后他删除了 await 关键字,看起来像上面的代码,他后来为 tours 对象添加了 await 关键字。
讲师解释说,如果我们在查询中使用 await 像 const query = await Tour.find(queryObj); 那么代码将立即执行,然后我们将无法在查询上链接其他方法,例如 .where() 或 .@ 987654330@.
我需要有人为我解释这些问题:
- 如果我们使用
await,为什么代码会立即执行? -
Tour.find()确实需要时间来查询数据库,所以我认为我们应该添加await,不是吗?
【问题讨论】:
标签: node.js mongodb express mongoose async-await