mirror of
https://github.com/Wolvan/poll.horse.git
synced 2024-11-22 04:58:00 +01:00
Implement backend and frontend loading
This system lets a server modularly load backend and frontend and allows hosting each of the parts on separate services.
This commit is contained in:
parent
8bc3f7fe36
commit
1031a4c36f
5 changed files with 1243 additions and 10 deletions
1198
package-lock.json
generated
1198
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -34,6 +34,8 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/chai": "^4.2.22",
|
"@types/chai": "^4.2.22",
|
||||||
"@types/chai-as-promised": "^7.1.4",
|
"@types/chai-as-promised": "^7.1.4",
|
||||||
|
"@types/compression": "^1.7.2",
|
||||||
|
"@types/express": "^4.17.13",
|
||||||
"@types/fs-extra": "^9.0.13",
|
"@types/fs-extra": "^9.0.13",
|
||||||
"@types/mocha": "^9.0.0",
|
"@types/mocha": "^9.0.0",
|
||||||
"@types/node": "^16.11.10",
|
"@types/node": "^16.11.10",
|
||||||
|
@ -52,6 +54,8 @@
|
||||||
"typescript": "^4.5.2"
|
"typescript": "^4.5.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"commander": "^8.3.0"
|
"commander": "^8.3.0",
|
||||||
|
"compression": "^1.7.4",
|
||||||
|
"express": "^4.17.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
7
src/backend.ts
Normal file
7
src/backend.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
import { Router } from "express";
|
||||||
|
|
||||||
|
export default function init(router: Router): void {
|
||||||
|
|
||||||
|
}
|
6
src/frontend.ts
Normal file
6
src/frontend.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
"use strict";
|
||||||
|
import { Router } from "express";
|
||||||
|
|
||||||
|
export default function init(router: Router): void {
|
||||||
|
|
||||||
|
}
|
36
src/main.ts
36
src/main.ts
|
@ -1,13 +1,47 @@
|
||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import loadConfig from "./config-loader";
|
import loadConfig from "./config-loader";
|
||||||
import { program } from "commander";
|
import { program } from "commander";
|
||||||
|
import express from "express";
|
||||||
|
import compression from "compression";
|
||||||
|
import { resolve } from "path";
|
||||||
|
|
||||||
async function main(): Promise<void> {
|
async function main(): Promise<void> {
|
||||||
await loadConfig([
|
await loadConfig([
|
||||||
|
["--no-frontend", "Do not start the frontend server"],
|
||||||
|
["--no-backend", "Do not start the backend server"],
|
||||||
|
["-p, --port <port>", "Port to listen on", (port: any) => parseInt(port), 6969],
|
||||||
|
["--backend-base-url <url>", "Base URL for the backend server", null],
|
||||||
], ".poll-horse-config");
|
], ".poll-horse-config");
|
||||||
const opts = program.opts();
|
const opts = program.opts();
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(compression());
|
||||||
|
|
||||||
|
if (opts.backend) {
|
||||||
|
console.log(`Mounting backend`);
|
||||||
|
const backendRouter = express.Router();
|
||||||
|
|
||||||
|
const backend = await import("./backend");
|
||||||
|
await backend.default(backendRouter);
|
||||||
|
|
||||||
|
app.use("/_backend/", backendRouter);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.frontend) {
|
||||||
|
console.log(`Mounting frontend`);
|
||||||
|
const frontendRouter = express.Router();
|
||||||
|
const frontend = await import("./frontend");
|
||||||
|
await frontend.default(frontendRouter);
|
||||||
|
|
||||||
|
app.use("/static", express.static(resolve(__dirname, "../frontend/static")));
|
||||||
|
app.use("/", frontendRouter);
|
||||||
|
}
|
||||||
|
|
||||||
|
app.listen(opts.port, () => {
|
||||||
|
console.log(`Listening on port ${opts.port}`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
Loading…
Reference in a new issue