10
votes

Validation dans Express-Validator

J'utilise le validateur express pour la validation. J'utilise Mongoose pour la base de données, il a également une validation intégrée. Je veux savoir lequel devrais-je utiliser?

Je veux aussi savoir si la validation dans Express-Validator est parallèle. Prenez ce code par exemple: P>

req.checkBody('email', 'Invalid email').notEmpty().isEmail().isUnique();
req.checkBody('password', 'Invalid possword').notEmpty().len(8, 30);
req.checkBody('first_name', 'Invalid first_name').notEmpty().isAlpha();
req.checkBody('last_name', 'Invalid last_name').notEmpty().isAlpha();
req.checkBody('dateofbirth', 'Invalid dateofbirth').notEmpty.isDate();


0 commentaires

3 Réponses :


10
votes

express-validator est destiné à valider l'entrée passée par le navigateur / client; La validation de Mongoose est destinée à valider les documents nouvellement créés. Les deux servent à un objectif différent, il n'ya donc pas de réponse propre à laquelle vous devriez utiliser. Vous pouvez utiliser les deux, même.

Quant à l'ordre de validation: les chèques seront effectués en série. Vous pouvez utiliser async.parallel () pour le faire apparaître comme si les chèques sont effectués en parallèle, mais dans la réalité, ils ne seront pas car les chèques sont synchrones. < / p>

edit : Node-validateur (et donc express-validator ) est un validateur de chaîne. Le test de l'unicité n'est pas une opération de chaîne mais fonctionne sur votre modèle de données, vous ne devriez donc pas essayer d'utiliser Node-validator pour celui-ci (en fait, je ne pense même pas que vous peut ).

Au lieu de cela, je vous suggère d'utiliser Mongoose unique pour vous assurer que Une adresse e-mail ne se produit qu'une fois dans votre base de données.

Alternativement, utilisez un module de validateur prenant en charge les opérations ASYNC, telles que async-valider .


15 commentaires

Pourquoi je ne peux pas les faire travailler en parallèle? Je veux dire si cela est async.parallel (), alors pourquoi sera-t-il toujours synchrone? Il me semble qu'ils sont des fonctions qui créent une erreur que nous vérifions après ces validations. Si je suis correct, nous pouvons utiliser le parallèle et vérifier l'erreur après la fin des validations. S'il vous plaît clarifier moi les probs


ASYNC.PARALLELLEL Serculer uniquement les appels asynchrones (E / S), que les appels de validateur express ne sont pas. Découvrez La documentation correspondante sur la manière dont vous pouvez gérer les erreurs (qui est Aussi Fait après que toutes les validations sont effectuées).


Est-ce un problème avec le validateur express ou le validateur de nœud? Si son nœud validateur que je pense qu'il est très difficile de le réparer? Mais si c'est avec un validateur express que j'espère que quelque chose peut être fait.


Quel "problème" parlez-vous? Que devrait être corrigé?


Vous avez dit que les appels Express-Validator ne sont pas asynchrones. Alors, est-ce le validateur express-validateur ou le validateur de nœud dont les appels ne sont pas asynchrones?


Les deux. Mais pourquoi ces appels ne sont-ils pas un problème aussi asynchrones? Je suis confus pourquoi vous avez besoin d'eux pour être asynchrones.


Vous avez seulement dit que comme ils ne sont pas asynchrones, ces appels ne peuvent donc pas être exécutés en parallèle. Je dois fondamentalement vérifier le corps de nombreux champs et vouloir que ces contrôles soient en parallèle. Si vous voulez savoir pourquoi en parallèle que son Coz, certaines de mes validations doivent faire des requêtes de base de données et donc les exécuter en parallèle serait plus rapide.


req.Checkbody ("e-mail" {Notempty: "Obligatoire", isémail: "invalide"}) .notempty (). Isemail (); req.Checkbody ('mot de passe', {notempty: 'requis'}). Noteur (); req.Checkbody ('nom'). Noteur (); req.Checkbody ('last_name'). Noteur (); Juste pour clarifier, je veux que chacune de ces validations soit en parallèle.


Peut-être que ce serait mieux que vous augmentez votre question pour expliquer exactement ce que vous voulez. Tous les chèques que vous avez mentionnés ( notecty , isemail ) ne sont que des contrôles simples, je ne vois pas comment ils effectuent les requêtes de la base de données (ou pourraient être faites pour les exécuter).


Je conviens que je ne l'avais pas mentionné. Mais fondamentalement, je voulais savoir, c'est comment faire ces chèques en parallèle, pas la partie de base de données, alors pourquoi je voudrais mentionner cela?


Vous avez demandé pourquoi j'ai besoin de cela pour être en parallèle, donc j'ai mentionné la chose de la base de données. Disons par exemple, j'ai demandé que le courrier électronique soit unique et a écrit un validateur personnalisé pour vérifier si cet email est unique ou non? Alors maintenant pouvez-vous s'il vous plaît aidez-moi à comprendre comment les vérifier en parallèle.


J'ai édité la question avec les changements nécessaires. Sil te plait aide moi.


Suggérez-vous que la validation étant asynchrone est mauvaise? Je voudrais valider à l'aide de la mangouste, mais le problème est de savoir que la validation ne soit pas au niveau de la base de données, car une partie de ma validation est davantage à voir avec la manière dont l'application devrait être (bien qu'elle utilise la base de données pour la validation). Pensez-vous que la validation de la mangouste devrait être ce que j'adopte?


@Saranshmohapatra Je pense que vous devez utiliser un cadre de validation avec prise en charge de l'opération asynchrone (que Express-Validator et Node-validateur ne). Il n'y a rien de mal à la validation asynchratation que, utilisez simplement les bons outils :)


@Saranshmohapatra J'ai mentionné async-valider .



6
votes

Utilisation des deux MongoDB Unique contrainte et Express-Validator entraînera un traitement des erreurs complexes peu complexes: vous devez analyser les erreurs dans différents endroits et le traduire en format commun pour Réponse de repos. Une autre approche créera donc un validateur Express personnalisé qui trouvera un enregistrement avec une valeur de valeur dans MongoDB: xxx

si vous en avez besoin, voir l'exemple total avec ce code sur mon site Web: https://maketips.net/tip/161/validate-username-Available-utilisateur-express -Validator

Conclusion: Express-validator prend également en charge la validation asynchrone, vous permettant ainsi d'effectuer toute validation de données et de chaîne dont vous avez besoin sans mélanger. Validation de l'utilisateur et validation de back-db à bas niveau


0 commentaires

0
votes

Il n'y a aucun moyen que Express-validator puisse vérifier une adresse électronique est unique ou non, d'autre part, MongoDB n'est pas responsable de la vérification de votre adresse électronique entrée est au format correct.

Vous devez donc avoir à utiliser les deux quand ils sont dans le besoin, car ils servent à des fins complètes.


0 commentaires