63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
|
---
|
||
|
id: matched-data-api
|
||
|
title: matchedData()
|
||
|
---
|
||
|
|
||
|
These methods are all available via `require('express-validator')`.
|
||
|
|
||
|
## `matchedData(req[, options])`
|
||
|
- `req`: the express request object.
|
||
|
- `options` *(optional)*: an object which accepts the following options:
|
||
|
- `includeOptionals`: if set to `true`, the returned value includes optional data. Defaults to `false`.
|
||
|
- `onlyValidData`: if set to `false`, the returned value includes data from fields
|
||
|
that didn't pass their validations. Defaults to `true`.
|
||
|
- `locations`: an array of locations to extract the data from. The acceptable values include
|
||
|
`body`, `cookies`, `headers`, `params` and `query`. Defaults to `undefined`, which means all locations.
|
||
|
> *Returns:* an object of data that express-validator has validated or sanitized.
|
||
|
|
||
|
Extracts data validated or sanitized by express-validator from the request and builds
|
||
|
an object with them. Nested paths and wildcards are properly handled as well.
|
||
|
See examples below.
|
||
|
|
||
|
## Examples
|
||
|
### Gathering data from multiple locations
|
||
|
If data you validated or sanitized is spread across various request locations
|
||
|
(e.g. `req.body`, `req.query`, `req.params`, etc), then `matchedData` will gather it properly.
|
||
|
You can also customize which locations you want the data from.
|
||
|
|
||
|
```js
|
||
|
// Suppose the request looks like this:
|
||
|
// req.query = { from: '2017-01-12' }
|
||
|
// req.body = { to: '2017-31-12' }
|
||
|
|
||
|
app.post('/room-availability', check(['from', 'to']).isISO8601(), (req, res, next) => {
|
||
|
const queryData = matchedData(req, { locations: ['query'] });
|
||
|
const bodyData = matchedData(req, { locations: ['body'] });
|
||
|
const allData = matchedData(req);
|
||
|
console.log(queryData); // { from: '2017-01-12' }
|
||
|
console.log(bodyData); // { to: '2017-31-12' }
|
||
|
console.log(allData); // { from: '2017-01-12', to: '2017-31-12' }
|
||
|
});
|
||
|
```
|
||
|
|
||
|
### Including optional data
|
||
|
You may want to have [optional values](api-validation-chain.md#optionaloptions) among the required ones.
|
||
|
|
||
|
If they are not included, some databases might understand that you don't want to update those values,
|
||
|
so it's useful to set them to `null` or an empty string.
|
||
|
|
||
|
```js
|
||
|
// Suppose the request looks like this:
|
||
|
// req.body = { name: 'John Doe', bio: '' }
|
||
|
|
||
|
app.post('/update-user', [
|
||
|
check('name').not().isEmpty(),
|
||
|
check('bio').optional({ checkFalsy: true }).escape(),
|
||
|
], (req, res, next) => {
|
||
|
const requiredData = matchedData(req, { includeOptionals: false });
|
||
|
const allData = matchedData(req, { includeOptionals: true });
|
||
|
console.log(requiredData); // { name: 'John Doe' }
|
||
|
console.log(allData); // { name: 'John Doe', bio: '' }
|
||
|
});
|
||
|
```
|