Valeur de retour de mise à jour Mongoose / Mongodb et traitement des erreurs

Je suis un peu confus au sujet de la valeur de retour de la mise à jour Mongoldb et de la façon dont je devrais gérer les erreurs avec elle.

J’utilise Node.js, Express.js et Mongoose.js comme pilote Mongodb.

En parcourant de nombreux tutoriels, le seul moyen de gérer les erreurs que j’ai vu est …

Exemple: un schéma utilisateur simple .. et je souhaite mettre à jour telephoneNumber

Users { email : abc@abc.com, telephoneNumber : 123456 } 

Exemple de traitement des erreurs écrit dans node.js que de nombreux tutoriels m’ont appris

  Users.update({email: abc@abc.com}, {'$set': {telephoneNumber : 654321}, function(err, result){ if(err){ //err }else if(!result){ //update not success }else{ //update success } }); 

mais en parcourant la documentation Mongodb, j’ai découvert que la mise à jour renvoyait la valeur WriteConcern, qui renvoyait quelque chose comme ceci

  { "ok" : 1, // update with no err "nModified" :1, // successfully update 1 user "n" : 1 // found 1 } 

Ma question est donc la suivante: devrais-je gérer mon erreur comme ceci à la place, afin que j’en sache davantage sur les échecs de la mise à jour …

  Users.update({email: abc@abc.com}, {'$set': {telephoneNumber : 654321}, function(err, result){ if(err || result.ok === 0){ //err }else if(result.nModified === 0){ //update fail }else if(result.n === 0){ //could not be found }else{ //update success } }); 

Est-ce une mauvaise approche pour mettre à jour la gestion dans mongoose / mongodb?

Merci!! 🙂

Voici comment nous traitons les erreurs mongoose / mongodb. Il peut s’agir d’erreurs du type “cette valeur existe déjà” ou de problèmes similaires.

Tout d’abord dans le bloc d’erreur de l’appel à la mongoose, nous ajoutons:

 if (err) { return res.status(400).send({ message: errorHandler.getErrorMessage(err,req,res) }); } 

Ce qui appelle une fonction ‘getErrorMessage’ définie dans notre fichier errorHandler, qui peut appeler la fonction de message d’erreur unique. Nous enregistrons également les erreurs dans notre firebase database Mongo sous une collection séparée.

 exports.getErrorMessage = function(err,req,res) { var message = ''; if (err.code) { switch (err.code) { case 11000: case 11001: message = getUniqueErrorMessage(err); break; default: message = 'Something went wrong. We have logged this issue and will correct'; } } else { for (var errName in err.errors) { if (err.errors[errName].message) message = err.errors[errName].message; } } //log the error to Mongo ErrorLog.create(err,req,res); return message; }; var getUniqueErrorMessage = function(err) { var output; try { var fieldName = err.err.subssortingng(err.err.lastIndexOf('.$') + 2, err.err.lastIndexOf('_1')); output = fieldName.charAt(0).toUpperCase() + fieldName.slice(1) + ' already exists'; } catch (ex) { output = 'Unique field already exists'; } return output; 

};

Espérons que cela aide, faites-moi savoir si je peux clarifier quelque chose.