ValidationError
meteor add mdg:validation-error
Use a validation error to indicate that a method call has failed and the client can fix it by changing specific arguments. Examples:
- An argument isn't of the right type
- A number argument isn't in the right range
- A username wasn't found in the database
This kind of error is tied to a specific field so that you can display it next to an input in a form currently being filled by the user.
This error format is based on the error output of aldeed:simple-schema
.
API
new ValidationError(errors: Array)
errors
must be a array with keys of the form:
1[ 2 { 3 // Name of the field this error is about 4 name: String, 5 6 // Type of error, can be mapped to a nice message 7 // on the client 8 type: String, 9 10 // Any kind of details, depends on the type of error. 11 // Should probably include a `value` field that 12 // contains the invalid value passed from the client. 13 details: Object 14 } 15 ... 16]
Usage example
1// Inside a method definition 2saveProduct({ name, cost, category }) { 3 if (cost > 1000) { 4 throw new ValidationError([ 5 { 6 name: 'cost', 7 type: 'out-of-range', 8 details: { 9 value: cost, 10 min: 0, 11 max: 100 12 } 13 } 14 ]); 15 } 16 17 // ... the rest of the method 18}
You might catch the error returned by a method call and display it in the UI:
1Template.foo.events({ 2 'submit': (event, instance) => { 3 Meteor.call('method', (err) => { 4 if (err && err.error === ValidationError.ERROR_CODE) { 5 _.each(err.errors, function(error) { 6 instance.state.set(`error-${error.name}`: error.type); 7 }); 8 } 9 }); 10 } 11});
Works out of the box with mdg:method
This type of error is automatically thrown for invalid arguments if you use the mdg:method
package, where you can specify a schema for the arguments of your method.