When sending a request to /customers/41224d776a326fb40f000001
and a document with _id
41224d776a326fb40f000001
does not exist, doc
is null
and I'm returning a 404
:
Controller.prototype.show = function(id, res) {
this.model.findById(id, function(err, doc) {
if (err) {
throw err;
}
if (!doc) {
res.send(404);
}
return res.send(doc);
});
};
However, when _id
does not match what Mongoose expects as "format" (I suppose) for example with GET /customers/foo
a strange error is returned:
CastError: Cast to ObjectId failed for value "foo" at path "_id".
So what's this error?
Best Answer
Mongoose's
findById
method casts theid
parameter to the type of the model's_id
field so that it can properly query for the matching doc. This is an ObjectId but"foo"
is not a valid ObjectId so the cast fails.This doesn't happen with
41224d776a326fb40f000001
because that string is a valid ObjectId.One way to resolve this is to add a check prior to your
findById
call to see ifid
is a valid ObjectId or not like so: