@curveball/bodyparser
Version:
A curveball middleware for parsing JSON and Text bodies.
41 lines • 1.09 kB
JavaScript
import { BadRequest } from '@curveball/http-errors';
import * as qs from 'querystring';
export default function bodyParser() {
return async (ctx, next) => {
await parse(ctx);
return next();
};
}
function parse(ctx) {
if (ctx.request.is('json')) {
return parseJson(ctx);
}
if (ctx.request.is('x-www-form-urlencoded')) {
return parseUrlEncoded(ctx);
}
if (ctx.request.type.startsWith('text/')) {
return parseText(ctx);
}
return Promise.resolve();
}
async function parseJson(ctx) {
const body = await ctx.request.rawBody('utf-8');
if (body) {
try {
ctx.request.body = JSON.parse(body);
}
catch (e) {
throw new BadRequest('Unable to parse JSON: ' + e.message);
}
}
else {
ctx.request.body = {};
}
}
async function parseText(ctx) {
ctx.request.body = await ctx.request.rawBody('utf-8');
}
async function parseUrlEncoded(ctx) {
ctx.request.body = qs.parse(await ctx.request.rawBody('utf-8'));
}
//# sourceMappingURL=index.js.map