@paroicms/server
Version:
The ParoiCMS server
75 lines • 2.32 kB
JavaScript
import { ApiError } from "@paroicms/public-server-lib";
export function getPaSiteContext(req) {
if (!req.paSiteContext) {
throw new Error("site context missing in request");
}
return req.paSiteContext;
}
export function getRouteParameter(params, parameterName, options = {}) {
const value = params[parameterName];
if (value)
return value;
if (options.optional)
return;
throw new ApiError(`missing parameter "${parameterName}"`, 400);
}
export function serveTextContent(httpContext, { status, contentType, text, or304, }) {
const { req, res } = httpContext;
const cacheControl = "max-age=0";
if (or304) {
if (req.headers["if-none-match"] === or304.etag) {
return serve304NotModified(httpContext, {
cacheControl,
etag: or304.etag,
});
}
res.append("Cache-Control", cacheControl);
res.append("Etag", or304.etag);
}
else {
res.append("Cache-Control", cacheControl);
}
const buf = Buffer.from(text, "utf-8");
res.append("Content-Type", contentType ?? "text/html; charset=utf-8");
res.append("Content-Length", buf.byteLength.toString());
res.status(status ?? 200);
res.send(buf);
}
export function serve500Html(httpContext) {
const html = `<!DOCTYPE html>
<p>Internal error</p>`;
serveTextContent(httpContext, {
status: 500,
text: html,
});
}
export function serve404SimpleHtml(httpContext) {
const html = `<!DOCTYPE html>
<p>404 Not Found</p>`;
serveTextContent(httpContext, {
status: 404,
text: html,
});
}
export function serve304NotModified(httpContext, headers) {
const { res } = httpContext;
res.append("Cache-Control", headers.cacheControl);
res.append("Etag", headers.etag);
res.status(304);
res.send();
}
export function serve301Redirect(httpContext, redirectTo) {
const { res } = httpContext;
res.append("location", redirectTo);
res.status(301);
res.send();
}
export function serve503ServiceUnavailable(httpContext, message) {
const html = `<!DOCTYPE html>
<p>${message ?? "Service Unavailable"}</p>`;
serveTextContent(httpContext, {
status: 503,
text: html,
});
}
//# sourceMappingURL=http-helpers.js.map