186 votes

Quelle est l'erreur Mongoose Cast to ObjectId failed for value XXX at path "_id" ?

Lorsque vous envoyez une demande à /customers/41224d776a326fb40f000001 et un document avec _id 41224d776a326fb40f000001 n'existe pas, doc es null et je renvoie un 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);
    });
  };

Cependant, lorsque _id ne correspond pas à ce que Mongoose attend comme "format" (je suppose) par exemple avec GET /customers/foo une erreur étrange est renvoyée :

CastError : Cast to ObjectId failed for value "foo" at path "_id".

Alors, c'est quoi cette erreur ?

13voto

gustavohenke Points 9454

Est-ce que vous interprétez cette chaîne comme ObjectId ?

Ici, dans mon application, ce que je fais est :

ObjectId.fromString( myObjectIdString );

8voto

BloodyLogic Points 1019

Cela se produit lorsque vous passez un identifiant invalide à la mangouste. vérifiez-le avant de continuer, en utilisant la mangouste. isValid fonction

import mongoose from "mongoose";

// add this inside your route
if( !mongoose.Types.ObjectId.isValid(id) ) return false;

7voto

Crowdpleasr Points 1874

Dans mon cas, j'ai dû ajouter _id: Object dans mon schéma, et tout a bien fonctionné.

5voto

yogesh agrawal Points 408
 if(mongoose.Types.ObjectId.isValid(userId.id)) {
        User.findById(userId.id,function (err, doc) {
            if(err) {
                reject(err);
            } else if(doc) {
                resolve({success:true,data:doc});
            } else {
                reject({success:false,data:"no data exist for this id"})

            }
        });
        } else {
            reject({success:"false",data:"Please provide correct id"});
        }

le mieux est de vérifier la validité

5voto

think-serious Points 809

En date du 19 novembre 2019

Vous pouvez utiliser isValidObjectId(id) de la version 5.7.12 de Mangouste

https://mongoosejs.com/docs/api/mongoose.html#mongoose_Mongoose-isValidObjectId

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X