不要怂,就是干,撸起袖子干!

custom validators yield an Error instance and error args are transported as is

1 parent 775dd7b8
Showing with 15 additions and 6 deletions
...@@ -10,6 +10,9 @@ var DaoValidator = module.exports = function(model, options) { ...@@ -10,6 +10,9 @@ var DaoValidator = module.exports = function(model, options) {
this.options = options this.options = options
} }
/** @define {string} The error key for arguments as passed by custom validators */
DaoValidator.RAW_KEY_NAME = '__raw'
DaoValidator.prototype.validate = function() { DaoValidator.prototype.validate = function() {
var self = this var self = this
...@@ -24,13 +27,16 @@ DaoValidator.prototype.validate = function() { ...@@ -24,13 +27,16 @@ DaoValidator.prototype.validate = function() {
emitter.emit('success') emitter.emit('success')
}) })
.error(function(err) { .error(function(err) {
var errors = {} var error = new Error('Validation error')
error[DaoValidator.RAW_KEY_NAME] = []
Utils._.each(err, function (value) { Utils._.each(err, function (value) {
Utils._.extend(errors, value) error[DaoValidator.RAW_KEY_NAME].push(value[DaoValidator.RAW_KEY_NAME])
delete value[DaoValidator.RAW_KEY_NAME]
Utils._.extend(error, value)
}) })
emitter.emit('success', errors) emitter.emit('success', error)
}) })
}).run() }).run()
} }
...@@ -72,8 +78,11 @@ var validateModel = function() { ...@@ -72,8 +78,11 @@ var validateModel = function() {
var next = function(err) { var next = function(err) {
if (err) { if (err) {
var error = {} var error = {};
error[validatorType] = [err] error[DaoValidator.RAW_KEY_NAME] = err;
var msg = ((err instanceof Error) ? err.message : err)
error[validatorType] = [msg]
emitter.emit('error', error) emitter.emit('error', error)
} else { } else {
emitter.emit('success') emitter.emit('success')
...@@ -155,7 +164,7 @@ var prepareValidationOfAttribute = function(value, details, validatorType, optio ...@@ -155,7 +164,7 @@ var prepareValidationOfAttribute = function(value, details, validatorType, optio
try { try {
details.apply(this.model, callArgs) details.apply(this.model, callArgs)
} catch(ex) { } catch(ex) {
return next(ex.message) return next(ex)
} }
if (!isAsync) { if (!isAsync) {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!