kequapp
Version:
A minimal, zero-magic Node web framework built on native APIs
39 lines (38 loc) • 1.15 kB
JavaScript
import Ex from "../built-in/tools/ex.js";
export default function createParseBody(parsers, _default) {
return (body) => {
const contentType = body.headers['content-type'] ?? 'text/plain';
try {
for (const key of Object.keys(parsers)) {
if (contentType.startsWith(key)) {
return parsers[key](body);
}
}
if (_default)
return _default(body);
throw new Error('Unrecognized content type');
}
catch (error) {
throw Ex.BadRequest('Unable to process request', {
contentType,
error,
});
}
};
}
export function parseUrlEncoded(body) {
const params = new URLSearchParams(body.data.toString());
const result = {};
for (const key of params.keys()) {
if (params.getAll(key).length > 1) {
result[key] = params.getAll(key);
}
else {
result[key] = params.get(key);
}
}
return result;
}
export function parseJson(body) {
return JSON.parse(body.data.toString());
}