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
|
||
|
})
|
||
|
```
|