J'ai une route /api/:id où: id doit être de type ObjectId. Parce que la suite est la requête que je lance

const data = await Person.find({_id:req.params.id})

Cela fonctionne bien si: id est de type ObjectId mais si l'utilisateur exécute explicitement l'API, disons /api/anything, alors Mongoose passe une erreur

CastError: échec de la conversion en ObjectId pour la valeur "tout" au chemin "_id"

Donc, je voudrais vérifier si req.params.id est de type ObjectId et effectuer d'autres opérations uniquement si c'est le cas.

Ainsi, le code ressemblerait à

if(checkObjectId(req.params.id)) {
const data = await Person.find({_id:req.params.id})
}
0
Radical Edward 28 août 2020 à 09:19

2 réponses

Meilleure réponse

Utilisez la fonctionnalité Mongoose:

if(mongoose.isValidObjectId(req.params.id)) {
  const data = await Person.find({_id:req.params.id})
  ...
}

Mongoose.prototype.isValidObjectId()

Renvoie true si Mongoose peut convertir la valeur donnée en ObjectId, ou false dans le cas contraire.

mongoose.isValidObjectId(new mongoose.Types.ObjectId()); // true
mongoose.isValidObjectId('0123456789ab'); // true
mongoose.isValidObjectId(6); // false
2
Ionică Bizău 28 août 2020 à 06:22

Pourquoi if quand vous pouvez utiliser try ... catch

let data;
try {
    data = await Person.find({_id:req.params.id})
} catch(err) {
    console.log('Error retrieving data (Person):', err);
}
0
Theygen 28 août 2020 à 06:32