diff options
Move to Server Side Render with expressjs
Backend Rewritten in typescript
Signed-off-by: Marc Pervaz Boocha <mboocha@sudomsg.xyz>
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
new file: .editorconfig
modified: .gitignore
new file: Containerfile
renamed: favicon/icon.svg -> assets/favicon.svg
modified: assets/index.css
deleted: assets/index.js
deleted: assets/mandle.png
deleted: assets/sw.js
new file: assets/syntax.css
modified: deploy
deleted: eleventy.config.js
deleted: favicon/192.png
deleted: favicon/512.png
deleted: favicon/icon.ico
deleted: license
modified: package-lock.json
modified: package.json
deleted: src/_data/env.js
deleted: src/_data/metadata.js
deleted: src/_includes/base.njk
deleted: src/_includes/page.njk
deleted: src/_includes/post.njk
deleted: src/about.njk
deleted: src/blog.njk
new file: src/client/index.ts
deleted: src/gen/atom.njk
deleted: src/gen/error.njk
deleted: src/gen/feedjson.11ty.js
deleted: src/gen/gen.11tydata.js
deleted: src/gen/manifest.11ty.js
deleted: src/gen/metadata.11ty.js
deleted: src/gen/robot.njk
deleted: src/gen/sitemap.njk
deleted: src/index.njk
deleted: src/post/post.11tydata.js
new file: src/server/app.ts
new file: src/server/build.ts
new file: src/server/content/about.ts
new file: src/server/content/blog.ts
new file: src/server/content/feed.ts
new file: src/server/content/index.ts
new file: src/server/content/robots.ts
new file: src/server/content/sitemap.ts
new file: src/server/content/webmanifest.ts
new file: src/server/errHanadler.ts
new file: src/server/img.ts
new file: src/server/metadata.ts
new file: src/server/router.ts
new file: src/server/server.ts
new file: src/server/template/Base.ts
new file: src/server/template/Page.ts
new file: src/server/template/Post.ts
new file: src/server/template/atom.ts
new file: src/server/template/header.ts
new file: src/server/template/html.ts
new file: src/server/template/sitemap.ts
new file: src/server/template/syntax.ts
new file: src/server/template/table.ts
new file: src/server/template/vdom.ts
new file: src/server/template/xml.ts
new file: src/server/utils/createUrl.ts
new file: src/server/utils/curl.ts
new file: src/server/utils/isDefined.ts
new file: src/server/utils/isDevel.ts
new file: src/server/utils/relDir.ts
new file: src/server/utils/relUrl.ts
new file: src/server/utils/schema.ts
new file: src/server/utils/setStingRoute.ts
new file: src/server/utils/strHandler.ts
new file: src/worker/sw.ts
new file: src/worker/tsconfig.json
new file: tsconfig.json
Diffstat (limited to 'src/server/errHanadler.ts')
-rw-r--r-- | src/server/errHanadler.ts | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/server/errHanadler.ts b/src/server/errHanadler.ts new file mode 100644 index 0000000..84f9b26 --- /dev/null +++ b/src/server/errHanadler.ts @@ -0,0 +1,85 @@ +import Base from "./template/Base.js" +import createError from "http-errors" +import t, { c } from "./template/vdom.js" +import h from "./template/header.js" +import { STATUS_CODES } from "node:http" +import app from "./app.js" +import isDevel from "./utils/isDevel.js" +import isDefined from "./utils/isDefined.js" +import type express from "express" +import type { HttpError } from "http-errors" + +interface ErrObj { + code: number | string, + msg: string, + debug?: string | undefined +} + +async function errorTemplate(data: ErrObj): Promise<{ html: string; text: string; obj: ErrObj }> { + const { code, msg, debug } = data + const arg = { + ...data, + title: msg, + content() { + return [ + c(h, { level: 1, style: "color: darkred" }, `ERROR: ${code}`), + t("p", {}, msg), + isDefined(debug) && isDevel(app) ? t("p", {}, t("pre", {}, debug)) : "" + ] + } + } + return { + html: await Base(arg).render(), + text: `${code} - ${msg} +${debug || ""}`, + obj: data + } + +} + +async function errRender(res: express.Response, opt: ErrObj) { + const msg = await errorTemplate(opt) + res.format({ + html: () => { + res.send(msg.html) + }, + json: () => { + res.send(msg.obj) + }, + default: () => { + res.type("txt").send(msg.text) + } + }) +} + +export const errHandler = async function ( + err: HttpError, + _req: express.Request, + res: express.Response, + _next: express.NextFunction +) { + res.status(err.status || 500) + + await errRender(res, { + code: res.statusCode, + msg: res.statusMessage || STATUS_CODES[res.statusCode] || "Unknown", + debug: err.stack + }) + + console.error(err + (err.stack ?? "")) +} + +export function notFound(_req: express.Request, + _res: express.Response, + next: express.NextFunction +) { + next(createError(404)) +} + +export async function offline(_req: express.Request, + res: express.Response) { + await errRender(res, { + code: "Offline", + msg: "Can not reach the website. Check your Network", + }) +}
\ No newline at end of file |