Mongoose.findById
(и findByIdAndUpdate
и т. Д.), Кажется, ведут себя по-разному, когда дано:
- Идентификатор, который никогда не существовал : генерирует CastError, потому что в процессе мангуста не может привести строку, присвоенную ObjectId.
- Идентификатор, который существовал, но был удален : просто молча возвращает ноль.
Моя структура кода мешает проверять две вещи, хотя, на мой взгляд, они одинаковы.
Пример:
module.exports.findTodo = async (req, res, next) => {
try {
res.locals.todo = await Todo.findById(req.params.id);
// Handle deleted documents. THIS CHECK SHOULDN'T BE NECESSARY
if (!res.locals.todo) {
throw new NotFoundError('id');
}
next();
} catch (err) {
// Handling CastError later here
next(err);
}
};