73 lines
1.8 KiB
Markdown
73 lines
1.8 KiB
Markdown
---
|
|
id: schema-validation
|
|
title: Schema Validation
|
|
---
|
|
|
|
Schemas are a special, object-based way of defining validations or sanitizations on requests.
|
|
At the root-level, you specify field paths as keys, and objects as values -- which define
|
|
the error messages, locations and validations/sanitizations.
|
|
|
|
Its syntax looks like this:
|
|
|
|
```js
|
|
const { checkSchema } = require('express-validator');
|
|
app.put('/user/:id/password', checkSchema({
|
|
id: {
|
|
// The location of the field, can be one or more of body, cookies, headers, params or query.
|
|
// If omitted, all request locations will be checked
|
|
in: ['params', 'query'],
|
|
errorMessage: 'ID is wrong',
|
|
isInt: true,
|
|
// Sanitizers can go here as well
|
|
toInt: true
|
|
},
|
|
myCustomField: {
|
|
// Custom validators
|
|
custom: {
|
|
options: (value, { req, location, path }) => {
|
|
return value + req.body.foo + location + path;
|
|
}
|
|
},
|
|
// and sanitizers
|
|
customSanitizer: {
|
|
options: (value, { req, location, path }) => {
|
|
let sanitizedValue;
|
|
|
|
if (req.body.foo && location && path) {
|
|
sanitizedValue = parseInt(value);
|
|
} else {
|
|
sanitizedValue = 0;
|
|
}
|
|
|
|
return sanitizedValue;
|
|
}
|
|
},
|
|
},
|
|
password: {
|
|
isLength: {
|
|
errorMessage: 'Password should be at least 7 chars long',
|
|
// Multiple options would be expressed as an array
|
|
options: { min: 7 }
|
|
}
|
|
},
|
|
firstName: {
|
|
isUppercase: {
|
|
// To negate a validator
|
|
negated: true,
|
|
},
|
|
rtrim: {
|
|
// Options as an array
|
|
options: [[" ", "-"]],
|
|
},
|
|
},
|
|
// Wildcards/dots for nested fields work as well
|
|
'addresses.*.postalCode': {
|
|
// Make this field optional when undefined or null
|
|
optional: { options: { nullable: true } },
|
|
isPostalCode: true
|
|
}
|
|
}), (req, res, next) => {
|
|
// handle the request as usual
|
|
})
|
|
```
|