powahroot/examples/parse_post_data.mjs

44 lines
1.3 KiB
JavaScript

"use strict";
import RouterContext from 'powahroot/Server/RouterContext.mjs';
//import { middleware_catch_errors } from './monitor.mjs';
// Maximum body size in characters
const max_request_body_length = 128 * 1024; // 128K
function depostify(postdata) {
return postdata.split("&").reduce(function (decoded, chunk) {
chunk = chunk.split("=").map(decodeURIComponent);
decoded[chunk[0]] = chunk[1];
return decoded;
}, {})
}
/**
* Parses URL-encoded POST data out into the context.env.post_data variable.
* @param {RouterContext} context The context object.
* @param {Function} next Function to invoke the next middleware item
*/
async function middleware_parse_post(context, next) {
let raw_post_data = "";
context.request.on("data", async (chunk) => {
if(raw_post_data.length + chunk.length > max_request_body_length) {
context.send.plain(413, "Error: Request payload was too large.");
return;
}
raw_post_data += chunk;
});
context.request.on("end", async () => {
context.env.post_data = depostify(raw_post_data);
// Institute another error-catching safety net. This is needed because
// we're in an event here, which breaks the async chain.
//await middleware_catch_errors(context, next);
await next();
});
}
export default middleware_parse_post;