66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
"use strict";
|
|
|
|
/*
|
|
Fields middleware
|
|
This module exports a function that takes an optional configuration object parameter with the following
|
|
properties:
|
|
{
|
|
validFields: Array of strings (case sensitive),
|
|
invalidFields: Array of strings (case sensitive),
|
|
}
|
|
and returns an express compatible middleware function (req, res, next) that parses the following
|
|
parameters from the req.query object and sets an object on the res.locals.fields having the following
|
|
properties:
|
|
|
|
Object - with fields for the attributes value fields
|
|
|
|
*/
|
|
|
|
const middleware = (config) => {
|
|
|
|
config = config || {
|
|
validFields: null,
|
|
invalidFields: null,
|
|
};
|
|
|
|
if (config.validFields && (!Array.isArray(config.validFields))) {
|
|
throw new Error("config.validFields should be a non empty array of strings");
|
|
}
|
|
|
|
if (config.invalidFields && (!Array.isArray(config.invalidFields))) {
|
|
throw new Error("config.invalidFields should be a non empty array of strings");
|
|
}
|
|
|
|
return function (req, res, next) {
|
|
const fieldNames = Array.isArray(req.query.fields)
|
|
? req.query.fields
|
|
: req.query.fields
|
|
? [req.query.fields]
|
|
: [];
|
|
|
|
const fieldObject = fieldNames.filter(field => {
|
|
let isOk = true;
|
|
if (config.validFields) {
|
|
isOk = config.validFields.includes(field)
|
|
}
|
|
|
|
if (config.invalidFields) {
|
|
isOk = !config.invalidFields.includes(field)
|
|
}
|
|
|
|
return isOk;
|
|
});
|
|
|
|
res.locals.fields = {};
|
|
|
|
(Object.keys(fieldObject).length > 0) ? res.locals.fields['fields'] = fieldObject : null;
|
|
config.invalidFields ? res.locals.fields['invalidFields'] = config.invalidFields : null;
|
|
config.validFields ? res.locals.fields['validFields'] = config.validFields : null,
|
|
|
|
next();
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
middleware
|
|
} |