From 8de89944dc813e12c9dfcbe8e5b45558d61fc274 Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Thu, 21 Jun 2018 10:29:55 -0300 Subject: [PATCH] Add function in response middleware 2 flat objects --- src/libs/middlewares/response.js | 44 +++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/libs/middlewares/response.js b/src/libs/middlewares/response.js index bd5009cd..62e1d960 100644 --- a/src/libs/middlewares/response.js +++ b/src/libs/middlewares/response.js @@ -3,13 +3,51 @@ const log = require(`${libs}/log`)(module); const xml = require('js2xmlparser'); const csv = require('csv-express'); - // Custom generic middleware used respond requests. - // The function reads the req.query.format param and respond in json, xml or csv +// Função para transformar um resultado que contém objetos com arrays aninhados em vários objetos +// sem arrays aninhandos +function flatObj(obj) { + let flatList = []; + let tempObj = {}; + + Object.keys(obj).forEach((key) => { + if(obj[key] instanceof Array) { + obj[key].forEach((i) => { + let flatten = flatObj(i); + if(flatten instanceof Array) { + flatten.forEach((j) => { + flatList.push(Object.assign({}, tempObj, j)); + }); + } else { + flatList.push(Object.assign({}, tempObj, flatten)); + } + }); + } else if(obj[key] instanceof Object) { + tempObj = Object.assign({}, tempObj, obj[key]); + } else { + tempObj[key] = obj[key]; + } + }); + + if(flatList.length > 0) return flatList; + return tempObj; +} + + // Custom generic middleware used to answer requests. + // The function reads the req.query.format param and answers in json, xml or csv function response(value) { return (req, res, next) => { if (req.query.format === 'csv') { + let result = []; + req.result.forEach((i) => { + let flatten = flatObj(i); + if(flatten instanceof Array) { + result = [...result, ...flatten]; + } else { + result.push(flatten); + } + }); res.attachment(`${value}.csv`); - res.csv(req.result, true); + res.csv(result, true); } else if (req.query.format === 'xml') { res.send(xml.parse('result', { [value]: req.result })); } else { -- GitLab