home-lab/backend/index.ts

36 lines
1.0 KiB
TypeScript

import "dotenv/config";
import { Hono } from "hono";
import { cors } from "hono/cors";
import fs from "node:fs";
import { HTTPException } from "hono/http-exception";
import { serveStatic } from "@hono/node-server/serve-static";
import { serve } from "@hono/node-server";
import routes from "./routes/_routes";
import createWsServer from "./websocket";
const PUBLIC_DIR = "./public";
const app = new Hono()
.use(cors())
.route("/api", routes)
.use("*", serveStatic({ root: PUBLIC_DIR }), async (c) => {
const index = fs.readFileSync(PUBLIC_DIR + "/index.html", "utf8");
c.header("Content-Type", "text/html");
return c.html(index);
})
.onError((err, c) => {
if (err instanceof HTTPException) {
return err.getResponse();
}
return c.json({ message: err.message }, 500);
});
const server = serve(
{ fetch: app.fetch, port: parseInt(process.env.PORT || "") || 3000 },
(info) => {
console.log(`App listening on http://${info.address}:${info.port}`);
}
);
createWsServer(server);