@63pokupki/nodejs-common
Version:
Common nodejs functionality
55 lines • 2.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const colors_1 = __importDefault(require("colors"));
/* LEGO ошибок */
function ParseBodyMiddleware(ctx) {
if (ctx.req.method === 'POST') {
const body = [];
ctx.req.on('error', (err) => {
console.error(colors_1.default.red('Ошибка парсинга тела запроса - '), ctx.req.url, err);
ctx.error(400);
});
ctx.req.on('data', (chunk) => {
body.push(chunk);
});
ctx.req.on('end', () => {
let sBody = Buffer.concat(body).toString();
try {
if (sBody && sBody[0] === '{') {
ctx.body = JSON.parse(sBody);
if (ctx.body.data) { // Если встречаем [data] парсим ее как json
ctx.body.data = JSON.parse(String(ctx.body.data));
}
}
else {
sBody = decodeURI(encodeURI(sBody));
const vSearchParams = new URLSearchParams(sBody);
// Итерируем параметры form параметры поиска.
for (const p of vSearchParams) {
const kBodyParam = p[0];
const vBodyParam = p[1];
if (kBodyParam == 'data') { // Если встречаем [data] парсим ее как json
ctx.body[kBodyParam] = JSON.parse(vBodyParam);
}
else {
ctx.body[kBodyParam] = vBodyParam;
}
}
}
ctx.next();
}
catch (e) {
console.error(colors_1.default.red('Ошибка парсинга тела запроса - '), ctx.req.url);
ctx.error(400);
}
});
}
else {
ctx.next();
}
}
exports.default = ParseBodyMiddleware;
//# sourceMappingURL=ParseBodyMiddleware.js.map