Pourquoi Mangouste ne pas valider la mise à jour?
J'ai ce code
var ClientSchema = new Schema({
name: {type: String, required: true, trim: true}
});
var Client = mongoose.mode('Client', ClientSchema);
À l'aide de l'express, j'ai créer un nouveau client avec ce code
var client = new Client(req.body);
client.save(function(err, data) {
....
});
Si je laisse le champ nom vide sur la forme, la mangouste ne permet pas de créer le client, car je l'ai mis comme requis sur le schéma. Aussi, si je laisse des espaces avant et après le nom, la mangouste supprimer les espaces avant de l'enregistrer.
Maintenant, j'essaie de mettre à jour un client avec ce code
var id = req.params.id;
var client = req.body;
Client.update({_id: id}, client, function(err) {
....
});
Il permettez-moi de changer le nom, mais si je le laisse vide sur la forme, la mangouste n'est pas de valider et d'enregistrer un nom vide. Si j'ai ajouter des espaces vides avant et après le nom, il enregistrer le nom avec des espaces.
Pourquoi mangouste valider sur enregistrer, mais pas sur la mise à jour? Je vais le faire dans le mauvais sens?
mongodb: 2.4.0
mangouste: 3.6.0
express: 3.1.0
nœud: 0.10.1 l'a
- l'approche que vous allé de l'avant? Juste curieux, face à exactement le même problème. Pouvez-vous s'il vous plaît partagez exemple ici. Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
Vous ne faites rien de mal,
validation
est mis en œuvre à l'interne middleware au sein de la Mangouste et le middleware n'est pas exécutée pendant uneupdate
que c'est essentiellement un pass-through pour le pilote natif.Si vous voulez que votre client de mise à jour validée, vous aurez besoin de
find
l'objet de mise à jour, appliquer les nouvelles valeurs de propriété (voir le trait de soulignement estétendre
méthode), et ensuite appelersave
sur elle.Mangouste 4.0 Mise À Jour
Comme indiqué dans les commentaires et victorkohl réponse de la Mangouste maintenant en charge la validation des champs de
$set
et$unset
opérateurs lorsque vous incluez lerunValidators: true
option dans leupdate
appel.Comme de la Mangouste 4.0, vous peut exécuter des validateurs sur
update()
etfindOneAndUpdate()
en utilisant le nouveau drapeaurunValidators: true
.Par exemple, étant donné OP Schéma:
Passant le drapeau sur chaque mise à jour
Vous pouvez utiliser la nouvelle balise comme ceci:
À l'aide de l'indicateur sur une
pre
crochetSi vous ne souhaitez pas définir le drapeau de chaque mise à jour de quelque chose, vous pouvez définir un
pre
crochet pourfindOneAndUpdate()
:Alors vous pouvez
update()
à l'aide de la validateurs sans passer lerunValidators
drapeau à chaque fois.{ runValidators: true }
sur la mise à jour des appels fonctionne très bien. Mais pré crochet option ne fonctionne pas pour moi, dans la Mangouste version 4.1.0mongodb ne pas exécuter la validation de la mise à jour par défaut.
afin de rendre le travail de validation par défaut lors de la mise à jour, juste avant de vous connecter à mongodb, vous pouvez définir des paramètres globaux seuls comme ça:
et tout intégré ou de validation personnalisée sera exécuté sur la mise à jour de
Dans votre modèle, ex. Category.js fichier:
Dans votre fichier de route:
Vous avez besoin d'ajouter { runValidators: true } en tant que troisième argument pour la validation de travailler sur la mise à jour.