【发布时间】:2019-12-27 00:36:50
【问题描述】:
开发 node.js 应用程序。由于某种原因,这个 findOne 调用总是返回未定义,即使我已经验证 req.params.id 是有效的并且它应该返回数据......
let event = await Event.findOne({ venue: ObjectId(req.params.id) });
我也试过....
let event = await Event.findOne({ venue: req.params.id });
这是我的事件模型定义的一部分......
const EventSchema = new mongoose.Schema({
eventDate: {
type: Date
},
venue: {
type: mongoose.Schema.ObjectId,
ref: 'Venue'
},
在邮递员中,我正在对 /venues/5e0401c4a246333ca4ced332 url 执行 DELETE http 动词以供您参考。
基本上我想在事件表中搜索场地 ID。在我决定删除之前,我正在查看该场地是否正在被某个活动使用。
这是整个方法...
// @desc Delete venue
// @route DELETE /api/v1/venues/:id
// @access Private
exports.deleteVenue = asyncHandler(async (req, res, next) => {
let venue = await Venue.findById(req.params.id);
if (!venue) {
return next(
new ErrorResponse(`No venue with the id of ${req.params.id}`, 404)
);
}
if (req.user.role !== 'manager' && req.user.role !== 'admin') {
return next(new ErrorResponse(`Not authorized to delete venue`, 401));
}
// the following line always returns undefined even though the venue
// exists in the events table.... then it jumps to the end of the method
let event = await Event.findOne({ venue: ObjectId(req.params.id) });
if (event) {
return next(
new ErrorResponse(
`You cannot delete a venue because events are tied to it.`,
404
)
);
}
await Venue.remove();
res.status(200).json({
success: true,
data: {}
});
});
使用 Compass,查看事件集合我肯定会看到使用我提交的 id 的记录...
_id:5e045b6e0c38f2502440ecb7
attendees:Array
eventDate:2020-01-01T05:00:00.000+00:00
venue:5e0401c4a246333ca4ced332
status:"planning"
我做到了……
console.log(`id is ${req.params.id}`);
let event = await Event.findOne({ venue: req.params.id });
结果显示我传递了正确的 id....(控制台输出)
id is 5e0401c4a246333ca4ced332
ReferenceError: Event is not defined
at C:\Projects\abc\controllers\venues.js:90:15
任何见解将不胜感激。谢谢!
【问题讨论】:
-
你得到的
req.params.id的值是多少。 -
你确定你有那个
venue的记录吗? -
能否也请您发布您目前拥有的删除功能的完整代码
-
@AnkitaKuchhadiya 场地 ID 是 5e0401c4a246333ca4ced332
-
await Event.findById应该是await Event.findOne()