HMVE
Handle mongoose validation error with custom and localize messages
What ?
Mongoose has schema validation, but its error message isn't user-friendly, example :
schema : fullName : type : String minlength : 3 data : fullName : 'Bi'
Will generate error message :
Path `fullName` `Bi` is shorter than the minimum allowed
With hmve, you can custom error message, like :
Full name must be at least 3 characters long
and localize :
(Vietnamese) Họ tên phải dài ít nhất 3 kí tự
Config
Let's view simple config file, for :
Use
Add path names
-
For single language, just add $name to mongoose Schema :
username : type : String required : true unique : true $name : 'tên tài khoản'If $name not specific, hmve will use path ('username')
-
For multi language, use setPathNames() with language package name
hmve;hmve;
Handle error
hmve only handle mongoose validation error, other error type will be return directly.
On mongoose document validate()
Cann't handle unique error.
let user = ;user;
On mongoose model write method like create(), findOneAndUpdate(), ...
Can handle unique error.
UserModel ;
List error kinds and their context variables
Use this to write custom message templates
KIND | CONTEXT VARIABLE |
---|---|
* | PATH, PATH_NAME, VALUE |
type | TYPE, TYPE_NAME, STRING_VALUE |
min | MIN |
max | MAX |
minlength | MIN_LENGTH |
maxlength | MAX_LENGTH |
regexp | |
enum | ENUM_VALUES, STRING_ENUM_VALUES |
validate | |
unique |
Error Object
"message" : "Birthday must be a date, Username is required, Full name must be at least 3 characters long" "messages" : "Birthday must be a date" "Username is required" "FullName must be at least 3 characters long" "name" : "ValidationError" "code" : "ERR_MONGOOSE_VALIDATION" "model_name" : "Users" "pack" : "DEFAULT" "errors" : "message" : "Birthday must be a date" "context" : "KIND" : "type" "PATH_NAME" : "birthday" "PATH" : "birthday" "TYPE" : "Date" "TYPE_NAME" : "date" "VALUE" : "is a date?" "STRING_VALUE" : "\"is a date?\"" "template" : "{PATH_NAME} must be a {TYPE_NAME}" "message" : "Username is required" "context" : "KIND" : "required" "PATH_NAME" : "username" "PATH" : "username" "template" : "{PATH_NAME} is required" "message" : "Full name must be at least 3 characters long" "context" : "KIND" : "minlength" "PATH_NAME" : "full name" "PATH" : "fullName" "VALUE" : "Bi" "MIN_LENGTH" : 3 "template" : "{PATH_NAME} must be at least {MIN_LENGTH} characters long"
API LIST
API | Description |
---|---|
hmve(model, validationError, [options]) | Handle mongoose validation error |
validate(doc, [options]) | Validate mongoose document, handle error with hmve |
setMessageTemplates(messageTemplate, [packageName]) | Set message template for a package |
setTypeNames(typeNames, [packageName]) | Set type names for a package |
setPathNames(model, pathNames, [packageName]) | Set path names for a package |
config(options) | Config |
Handler
Object
hmve(model, validationError, [options]) ⇒ Handle only mongoose validation error, other error type will be return directly.
Returns: Object
- user-friendly error
Param | Type | Description |
---|---|---|
model | Object |
Mongoose model object or name |
validationError | Object |
Mongoose validation error |
[options] | Object |
options |
Options
field | Type | Description | Example |
---|---|---|---|
package | String |
Language package name. Default is config.default_package. Must be provide in multi language mode. | 'vi', 'jp' |
exclude_errors | String|Array |
One or more error kinds will be excluded. Ex: exclude 'required' error when validating update data. | 'required', ['required, 'unique'] |
Example
const hmve = ; const UsersSchema = username : type : String required : true fullName : type : String minlength : 3 $name : 'full name' birthday : type : Date ; const UsersModel = mongoose; let user = ; user;
object
validate(doc, [options]) ⇒ Validate mongoose document, handle error with hmve. This just a convenience syntax with async/await.
Returns: object
- user-friendly error
Param | Type | Description |
---|---|---|
doc | Object |
mongoose document |
[options] | Object |
same as hmve() options |
Example
const hmve = ; const UsersSchema = username : type : String required : true fullName : type : String minlength : 3 $name : 'full name' birthday : type : Date ; const UsersModel = mongoose; let user = ; let err = await hmve;if err resstatus400; // Birthday must be a date, Username is required, Full name must be at least 3 characters long
Setter
setMessageTemplates(messageTemplate, [packageName])
Set message template for a package
See: getMessageTemplates('DEFAULT') to view default message template
Param | Type | Description |
---|---|---|
messageTemplate | Object |
{ <error_kind> : <message_template> } |
[packageName] | String |
Package name, ex: 'en', 'vi', 'jp' |
Example
hmve;
setTypeNames(typeNames, [packageName])
Set type names for a package
See: getTypeNames('DEFAULT') to view default type names
Param | Type | Description |
---|---|---|
typeNames | Object |
{ : <type_name> } |
[packageName] | String |
Package name, ex: 'en', 'vi', 'jp' |
Example
hmve;
setPathNames(model, pathNames, [packageName])
Set path names for a package
Param | Type | Description |
---|---|---|
model | Object | String |
mongoose model or model name |
pathNames | Object |
{ |
[packageName] | String |
package name, ex: 'en', 'vi' |
Example
hmve;
config(options)
set options
Param | Type | Description |
---|---|---|
options | Object |
options |
Example
hmve;