¿Cómo podría crear un middleware para recortar todos los datos de req.body , incluso los datos NESTED ?
También acepto un paquete bien codificado de confianza.
Teniendo en cuenta que estoy usando true aquí: app.use(bodyParser.urlencoded({ extended: true }));
esta pregunta de referencia de código
trim: (req, res, next) => { if (req.method === 'POST') { for (const [key, value] of Object.entries(req.body)) { if (typeof value === 'string') req.body[key] = value.trim(); } } next(); }Este funcionará pero no para datos anidados
Puede recorrer cada objeto y matriz de forma recursiva y recortar en consecuencia
function trim(body) { for (const key in body) { if (typeof body[key] === "object" || Array.isArray(body[key])) { trim(body[key]); } else if (typeof body[key] === 'string') { body[key] = body[key].trim(); } } }; handleReq: (req, res, next) => { if (req.method === 'POST') { trim(req.body); } next(); }Una forma de lograr esto en una sola línea es utilizar la recursividad integrada en la funcionalidad de reemplazo de replacer , verificar que el valor sea un número o una cadena, luego recortarlo y luego analizar el resultado nuevamente en un objeto.
let obj = { "a": "f", "b": { "c": " g", "d": "h", "x": { "a": [ '1 ', '2 ', '3 ' ] } }, "e": " value3 " }; obj = JSON.parse(JSON.stringify(obj, (k, v) => ['string', 'number'].includes(typeof v) ? v.trim() : v)) console.log(obj)O podría usar una función recursiva, que si el valor es un objeto, la matriz luego recuerda la función, hay muchos ejemplos al respecto, hace una búsqueda.