1 | const _ = require('lodash');
|
2 | const validator = require('validator');
|
3 |
|
4 | const { extraSanitizers } = require('../utils/constants');
|
5 | const selectFields = require('../check/select-fields');
|
6 |
|
7 | module.exports = (fields, locations) => {
|
8 | const sanitizers = [];
|
9 | fields = Array.isArray(fields) ? fields : [fields];
|
10 |
|
11 | const middleware = (req, res, next) => {
|
12 | const instances = selectFields(req, { fields, locations, sanitizers });
|
13 | instances.forEach(instance => {
|
14 | _.set(req[instance.location], instance.path, instance.value);
|
15 | });
|
16 |
|
17 | next();
|
18 | };
|
19 |
|
20 | Object.keys(validator)
|
21 | .filter(methodName => methodName.startsWith('to') || extraSanitizers.includes(methodName))
|
22 | .forEach(methodName => {
|
23 | const sanitizerFn = validator[methodName];
|
24 | middleware[methodName] = (...options) => {
|
25 | sanitizers.push({
|
26 | sanitizer: sanitizerFn,
|
27 | options
|
28 | });
|
29 | return middleware;
|
30 | };
|
31 | });
|
32 |
|
33 | return middleware;
|
34 | }; |
\ | No newline at end of file |