UNPKG

formflux

Version:

A package to upload files to a server and parsing multipart-formData requests

95 lines (94 loc) 2.95 kB
import EventHandlers from "./EventHandlers"; import createNewBody from "./helpers/resBodyMaker"; import FormfluxError from "./FormFluxError"; class setContentToBody { constructor(obj) { this.obj = void 0; this.obj = obj; } setBody(req) { try { req.body = req.body ? req.body : {}; if (this.obj.contentBody.length > 0) { for (let i = 0; i < this.obj.contentBody.length; i++) { if (/\[.*\]/.test(this.obj.fieldNameBody[i])) { this.nestedData(req, this.obj.fieldNameBody[i], this.obj.contentBody[i]); } else req.body[`${this.obj.fieldNameBody[i]}`] = this.obj.contentBody[i]; } } EventHandlers.emitMessage("parseEnd", "parse commplete"); } catch (err) { throw new FormfluxError("Error in parsing form data.Invalid Format!", 400); } } nestedData(req, fieldName, data) { let outer = fieldName.substring(0, fieldName.indexOf("[")); let inners = fieldName.substring(fieldName.indexOf("[")); let i = 0; let current; let prev; let temp = inners.match(/\[([^\]]+)\]/g).map(s => s.slice(1, -1)); // [a,b,c] => [a,b,c] if (!req.body[`${outer}`]) { for (let _i = temp.length - 1; _i >= 0; _i--) { if (!isNaN(temp[_i])) { if (!prev) { current = [data]; prev = current; } else { current = [prev]; prev = current; } } else { if (!prev) { current = { [`${temp[_i]}`]: data }; prev = current; } else { current = { [`${temp[_i]}`]: prev }; prev = current; } } } req.body[`${outer}`] = current; } else { temp.unshift(outer); this.getNestedField(req, req.body, temp, temp[temp.length - 1], data, 0, req.body); } } // mapping..... getNestedField(req, obj, posArr, keySearch, data, i, prevObj) { if (i == posArr.length - 1) { // reached last position set the value if (Array.isArray(obj)) { if (!isNaN(posArr[i])) { // if the current position is a number then it is an array obj[posArr[i]] ? obj[posArr[i]] = data : obj.push(data); return; } else { obj[posArr[i]] = data; // needs some checking return; } } else { // it is an objct obj[posArr[i]] = data; return; } } if (!obj[posArr[i]]) { if (!isNaN(posArr[i])) { obj[posArr[i]] = createNewBody(posArr, i + 1, data); // create the rest return; } else { obj[posArr[i]] = createNewBody(posArr, i + 1, data); return; } } prevObj = obj[posArr[i]]; this.getNestedField(req, obj[posArr[i]], posArr, keySearch, data, i + 1, prevObj); } } export default setContentToBody; //# sourceMappingURL=SetBodyContentToReq.js.map