nitropack
Version:
Build and Deploy Universal JavaScript Servers
33 lines (32 loc) • 1.28 kB
JavaScript
import { eventHandler, setResponseStatus } from "h3";
import { useNitroApp } from "./app.mjs";
export function defineRenderHandler(handler) {
return eventHandler(async (event) => {
if (event.node.req.url.endsWith("/favicon.ico")) {
event.node.res.setHeader("Content-Type", "image/x-icon");
event.node.res.end(
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
);
return;
}
const response = await handler(event);
if (!response) {
if (!event.node.res.writableEnded) {
event.node.res.statusCode = event.node.res.statusCode === 200 ? 500 : event.node.res.statusCode;
event.node.res.end(
"No response returned from render handler: " + event.node.req.url
);
}
return;
}
const nitroApp = useNitroApp();
await nitroApp.hooks.callHook("render:response", response, { event });
if (!event.node.res.headersSent && response.headers) {
for (const header in response.headers) {
event.node.res.setHeader(header, response.headers[header]);
}
setResponseStatus(event, response.statusCode, response.statusMessage);
}
return typeof response.body === "string" ? response.body : JSON.stringify(response.body);
});
}