2017-01-05 5 views
1

他のバリデータのように動作しません:私は、ユーザーの作成中に、空メールを離れるときマングース独特のバリデータは、私は以下のように定義された電子メールフィールド持って私のユーザーのスキーマで

... 
email: { 
    unique: [true, 'A user with that email address exists. The email must be unique.'], 
    type: String, 
    lowercase: true, 
    required: [true, 'A user must have an email address'] 
}, 
... 

を、私は私のcutomisedエラーメッセージを見ることができますスキーマrequired: [true, 'A user must have an email address']で定義されています。ただし、別のユーザーが既に使用している電子メールアドレスを選択すると、別のエラーが表示され、uniqueフィールドに定義されたカスタマイズされたメッセージが表示されません。unique: [true, 'A user with that email address exists. The email must be unique.']

電子メールが空のときにエラーが発生しました(エラーメッセージが表示されるのは便利です)。エラーメッセージメールアドレスがである必要があります。電子メールが既に使用されている

Error create { MongooseError: User validation failed 
at ValidationError (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/error/validation.js:23:11) 
at model.Document.invalidate (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/document.js:1486:32) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/document.js:1362:17 
at validate (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:705:7) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:742:9 
at Array.forEach (native) 
at SchemaString.SchemaType.doValidate (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:710:19) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/document.js:1360:9 
at _combinedTickCallback (internal/process/next_tick.js:67:7) 
at process._tickCallback (internal/process/next_tick.js:98:9) 
errors: 
    { email: 
     { MongooseError: A user must have an email address 
     at ValidatorError (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/error/validator.js:24:11) 
     at validate (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:704:13) 
     at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:742:9 
     at Array.forEach (native) 
     at SchemaString.SchemaType.doValidate (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/schematype.js:710:19) 
     at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongoose/lib/document.js:1360:9 
     at _combinedTickCallback (internal/process/next_tick.js:67:7) 
     at process._tickCallback (internal/process/next_tick.js:98:9) 
    message: 'A user must have an email address', 
    name: 'ValidatorError', 
    properties: [Object], 
    kind: 'required', 
    path: 'email', 
    value: '' } }, 
message: 'User validation failed', 
name: 'ValidationError' } 

エラー:unique

Error create { MongoError: E11000 duplicate key error collection: stellium-io.users index: email_1 dup key: { : "[email protected]" } 
at Function.MongoError.create (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb-core/lib/error.js:31:11) 
at toError (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/utils.js:114:22) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/collection.js:657:23 
at handleCallback (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/utils.js:95:56) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/bulk/unordered.js:465:9 
at handleCallback (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/utils.js:95:56) 
at resultHandler (/Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb/lib/bulk/unordered.js:413:5) 
at /Users/fleavamini/Projects/stellium/stellium.io/node_modules/mongodb-core/lib/connection/pool.js:455:18 
at _combinedTickCallback (internal/process/next_tick.js:67:7) 
at process._tickCallback (internal/process/next_tick.js:98:9) 
name: 'MongoError', 
message: 'E11000 duplicate key error collection: stellium-io.users index: email_1 dup key: { : "[email protected]" }', 
driver: true, 
code: 11000, 
index: 0, 
errmsg: 'E11000 duplicate key error collection: stellium-io.users index: email_1 dup key: { : "[email protected]" }', 
getOperation: [Function], 
toJSON: [Function], 
toString: [Function] } 

これは意図された動作ですか? uniqueフィールドにカスタマイズされたエラーを表示し、新しいユーザーオブジェクトを作成しようとしているユーザーに返すことができます。

答えて

1

一意性は、(必要なように)検証パラメータではありません、それはそのフィールドのMongoDBの中に一意のインデックスを作成するために、マングースに指示します。

一意制約は、MongoDBサーバーですべて処理されます。重複したキーを持つ文書を追加すると、MongoDBサーバーは表示されているエラーを返します(E11000 ...)。

カスタムエラーメッセージを作成する場合は、これらのエラーを自分で処理する必要があります。これが用意されていませんが(このプラグインmongoose-unique-validator

schmea.post('save', function(error, doc, next) { 
    if (error.name === 'MongoError' && error.code === 11000) { 
    next(new Error('email must be unique')); 
    } else { 
    next(error); 
    } 
}); 

またはあなたが使用することができます:マングースのドキュメントのカスタムエラー処理を作成する方法についての例を提供します(「エラーがミドルウェアの処理」で検索)一意性制約が失敗した特定のフィールドを持つユーザー)

1

一意制約は、MongoDBサーバーで完全に処理されます。重複キーを含む文書を追加すると、MongoDBサーバーは表示されているエラーを返します(E11000 ...)

カスタムエラーメッセージを作成する場合は、これらのエラーを自分で処理する必要があります。以下のような

:マングースで

schmea.post('save',function(err,doc,next){ 
     if (err.name === 'MongoError' && err.code === 11000) { 
    next(new Error('email must be unique')); 
    } else { 
    next(error); 
    } 
}); 
関連する問題