sequelize.js validateur personnalisé, contrôler l'unicité du nom d'utilisateur / mot de passe
Imaginer j'ai défini le suivant validateur personnalisé fonction:
isUnique: function () { //This works as expected
throw new Error({error:[{message:'Email address already in use!'}]});
}
Cependant, lorsque je tente d'interroger la DB je rencontre des problèmes:
isUnique: function (email) { //This doesn't work
var User = seqeulize.import('/path/to/user/model');
User.find({where:{email: email}})
.success(function () { //This gets called
throw new Error({error:[{message:'Email address already in use!'}]}); //But this isn't triggering a validation error.
});
}
Comment puis-je interroger l'ORM dans un validateur personnalisé et de déclencher une erreur de validation basée sur la réponse de l'ORM?
bien que ne fonctionne pas, vous pouvez essayer de course simple
Sérieusement!? Je suis en train de programme pour la Sequelize interface plutôt qu'une mise en œuvre solide. Pourquoi ne pas le travail ci-dessus? Je peux seulement imaginer que .trouver est la capture de l'erreur quelque part?
Juste pour clarifier, de l'Utilisateur.find({où:{email: email}}).success() fonctionne parfaitement (comme spécifié dans le Sequelize docs). Le problème est que Sequelize n'est pas la capture de l'Erreur, ou l'erreur est d'être pris ailleurs.
autant que je sache
Ok, on dirait que j'ai beaucoup de travail à faire pour obtenir Sequelize en forme. C'est loin d'être aussi robuste que j'avais été amené à croire...
.find()
et dans le rappel de manipuler le résultat de la requête et de l'appel response.render
ou quoi que ce soit d'autre pour envoyer un message à l'utilisateur.Sérieusement!? Je suis en train de programme pour la Sequelize interface plutôt qu'une mise en œuvre solide. Pourquoi ne pas le travail ci-dessus? Je peux seulement imaginer que .trouver est la capture de l'erreur quelque part?
Juste pour clarifier, de l'Utilisateur.find({où:{email: email}}).success() fonctionne parfaitement (comme spécifié dans le Sequelize docs). Le problème est que Sequelize n'est pas la capture de l'Erreur, ou l'erreur est d'être pris ailleurs.
autant que je sache
User.find()
renvoie à un événement, il provoquera une erreur lors de l'événement est émis, de sorte que l'appel de la isUnique("[email protected]")
, et même essayer de try..catch
ne le fera pas.Ok, on dirait que j'ai beaucoup de travail à faire pour obtenir Sequelize en forme. C'est loin d'être aussi robuste que j'avais été amené à croire...
OriginalL'auteur Matt Richards | 2013-05-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier si l'email existe déjà comme ça:
user.find
avant de l'insérer.oui, vous pouvez le faire & évidemment, de son mieux, mais si vous avez d'auto incrémentation de la valeur dans la table, alors si votre requête d'insertion échoue en raison de l'unique violation puis aussi votre auto incrément id va augmenter, oui, c'est la façon dont tout le SQL fonctionne.
Je suis confus, vous semblez utiliser
unique
propriété de la colonneemail
(c'est à dire non pas comme une propriété de votrevalidate
objet). La doc dire queattributes.column.unique
peut avoir valeur deString | Boolean
; mais que votre valeur est un (pas de String ou Boolean) dont la valeur est : ` { args: true, msg : '...' }` . Cette valeur ressemble à comment vous pouvez l'utiliserunique
si vous l'avez ajouté à lavalidate
objet; mais vous avezunique
directement sur laemail
(alias de colonne) de l'objet...Le
unique
paramètre accepte un objet si il ontargs
comme une 'Chaîne' ou un 'Boolean' valeur. Le msg attribut est utilisé comme un message de validation.J'ai changé cela pour la accepté de répondre. Il a été répondu à presque 4 ans après l'original de la question et je viens de remarquer que c'.
OriginalL'auteur alvaropaco
Voici un échantillons simplifiée du fonctionnement d'un
isUnique
validation de rappel (fonctionne aussi de SequelizeJS v2.0.0). J'ai ajouté des commentaires pour expliquer les choses importantes:OriginalL'auteur c.hill
Avec Sequelize 2.0, vous devez attraper les Erreurs de Validation.
Tout d'abord, définissons le Modèle de l'Utilisateur avec un validateur personnalisé:
Puis, dans le contrôleur, la capture des Erreurs de Validation:
OriginalL'auteur Jon Saw
Succès de rappel, même si aucun utilisateur n'est trouvé. Vous devez vérifier si la fonction réussit un utilisateur comme un argument:
C'est parce que je viens de copier le code dans la question et a ajouté l'instruction si donc il serait de travailler
OriginalL'auteur Alejo