app2-api/middlewares/fields.js
2024-08-28 13:56:11 +02:00

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
}