Я создаю очень простое приложение RESTFUL, чтобы увидеть, как Node и Mongo работают вместе.
A сделал функцию для поиска документа "Persona" в mongodb по Id, поэтому вот код:
function getPersonabyId(req,res)
{
//en params del objeto request esta lo que llega por get
let idPersona=req.params.id;
//mongoose trae un método para pillar por id
Persona.findById(idPersona).exec((err,objPersona)=>
{
if(err)
{
res.status(500).send(err);
}
else{
res.status(200).send(objPersona);
}
})
}
И я использую этот маршрут, где выполняется функция:
miniApp.get("/getPersonaById/:id",controladorPersona.getPersonabyId);
Итак, когда я передаю в качестве параметра действительный идентификатор, все в порядке, я получаю соответствующий объект Persona вответ.
Но когда я использую недопустимый идентификатор (на mongodb нет документа с таким идентификатором), выдается ошибка, указанная в обратном вызове exec ... но не предполагается, что эта ошибкаследует выбрасывать только в случае проблем с сервером?несуществующий идентификатор не должен быть ошибкой 500, не так ли?
Я искал информацию и нашел это:
https://coursework.vschool.io/mongoose-crud/
Person.find((err, people) => {
// Note that this error doesn't mean nothing was found,
// it means the database had an error while searching, hence the 500 status
if (err) return res.status(500).send(err)
// send the list of all people
return res.status(200).send(people);
});
Ичтение закомментированных строк в приведенном выше коде смущает меня еще больше ... ошибка, как сказано в этих комментариях, должна быть базой данных ошибок или чем-то подобным, а не ошибкой "не найден" ... но ошибка фактически выдаетсякогда объект с таким идентификатором не найден!
Это ошибка, которую я получаю с недопустимым идентификатором:
{
"message": "Cast to ObjectId failed for value \"5b105ba453401c41d0e3da2\" at path \"_id\" for model \"Persona\"",
"name": "CastError",
"stringValue": "\"5b105ba453401c41d0e3da2\"",
"kind": "ObjectId",
"value": "5b105ba453401c41d0e3da2",
"path": "_id"
}