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 .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