NodeJS/ExpressJS/MongoDB/Mongoose アプリ内でバリデーターとエクスプレスバリデーターを使用して、ユーザーが既に登録されているメールアドレスを使用していないことを確認しようとしています。私はすでに電子メール フィールドに一意のインデックスを持っていますが、私がやろうとしているのは、1 つの方法を使用してすべての検証を 1 つの場所に保持することです。したがって、私の質問: Express-validator を使用して一意性を検証します。
電子メール アドレスを検索するためのスキーマ メソッドを作成しましたが、機能しています。カスタムバリデーターを作成し、コントローラーに接続しました。それも機能しています。私の問題は、コールバックからのスキーマ メソッドの結果をコントローラーのバリデーターに伝える方法がわからないことです。
user.js (モデル)
...
/**
* Check for email addresses already in the collection
*/
checkEmailDupes: function(req, cb) {
this.model('User').findOne({email: req}, function (err, user) {
if (err) {
return cb(err);
}
cb(null, user); // this is passing back the expected result
});
},
...
users.js (コントローラー)
...
// The call to the custom validator (shown below)
req.assert('email', 'Email must be unique').checkEmailDupes(user);
...
// Check for email addresses that are already registered
expressValidator.Validator.prototype.checkEmailDupes = function(user) {
user.checkEmailDupes(this.str, function (err, result) {
if (err) {
console.log('An error occurred in checkEmailDupes');
}
else {
console.log('Found a user in checkEmailDupes');
console.log(result); // this is producing the expected result
}
});
return this.error(this.msg || 'Looks like this email address has already been registered');
return this;
}
私は他のreturn this.error(this.msg...)
場所に行く必要があることを知っています。理想的には、それをコールバックにスローしますが、それを行うと、
TypeError: オブジェクト # にはメソッド「エラー」がありません