rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
79 lines (78 loc) • 2.32 kB
JavaScript
async function handleEvent(event, ctr, ctx, ctg) {
ctx.execute.event = "none";
switch (event) {
case "httpError":
case "wsConnectError":
case "wsMessageError":
case "wsCloseError": {
ctx.executeCode = false;
try {
if (!await ctg.controller.emitSafe(event, ctr, ctx.error)) {
if (ctr.type === "http" || ctr.type === "upgrade" || ctr.type === "close") {
ctx.response.status = 500;
ctx.response.statusMessage = void 0;
ctx.response.content = [`An Error occured:
${ctx.error}`];
console.error(`An Error occured:
`, ctx.error);
} else {
ctr.print(`An Error occured:
${ctx.error}`);
ctg.logger.error(`An Error while handling request occured:
`, ctx.error);
}
}
} catch (err) {
if (ctr.type === "http" || ctr.type === "upgrade" || ctr.type === "close") {
ctx.response.status = 500;
ctx.response.statusMessage = void 0;
ctx.response.content = [`An Error occured in the ${event} event:
${err}`];
console.error(`An Error occured in the ${event} event:
`, err);
} else {
ctr.print(`An Error occured in the ${event} event:
${err}`);
console.error(`An Error occured in the ${event} event:
`, err);
}
}
break;
}
case "route404": {
try {
ctx.response.status = 404;
ctx.response.statusMessage = void 0;
ctx.response.content = [`Cannot ${ctr.url.method} ${ctr.url.path}`];
await ctg.controller.emitSafe(event, ctr);
} catch (err) {
ctx.error = err;
await handleEvent("httpError", ctr, ctx, ctg);
}
break;
}
case "httpRequest": {
try {
await ctg.controller.emitSafe(event, ctr, () => ctx.executeCode = false);
} catch (err) {
ctx.error = err;
await handleEvent("httpError", ctr, ctx, ctg);
}
break;
}
case "wsConnect":
case "wsMessage":
case "wsClose": {
try {
await ctg.controller.emitSafe(event, ctr, () => ctx.executeCode = false);
} catch (err) {
ctx.error = err;
await handleEvent(event.concat("Error"), ctr, ctx, ctg);
}
break;
}
}
}
export {
handleEvent as default
};