Switch to EJS and bootstrap.
parent
e9aabe6a92
commit
7b7d2bb2ae
|
@ -1,2 +1 @@
|
|||
node_modules/
|
||||
dist/
|
||||
node_modules/
|
|
@ -0,0 +1,27 @@
|
|||
// Import things
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
const server = require('http').createServer(app);
|
||||
const port = process.env.PORT || 3430;
|
||||
|
||||
// Set the templates folder for the thingy
|
||||
app.set('views', __dirname + '/../Templates');
|
||||
app.set('view engine', 'ejs');
|
||||
|
||||
// Makes it so that the Public folder mounts under /
|
||||
app.use(express.static(__dirname + '/../Public'));
|
||||
|
||||
// Main page
|
||||
app.get('/', function(req, res){
|
||||
res.render('index');
|
||||
});
|
||||
|
||||
// Simple way to expose a function
|
||||
exports = module.exports = rws;
|
||||
|
||||
// rws = RunWebServer
|
||||
function rws() {
|
||||
server.listen(port, () => {
|
||||
console.log('✅ Webserver is running ( %d )', port);
|
||||
});
|
||||
};
|
|
@ -0,0 +1,3 @@
|
|||
#cssloaded {
|
||||
color:deepskyblue;
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
import type { NextFunction, Request, Response } from "express";
|
||||
import type { SessionOptions } from "express-session";
|
||||
import { Liquid } from "liquidjs";
|
||||
import { readFileSync, readdirSync } from "fs";
|
||||
import crypto from "crypto";
|
||||
import express from "express";
|
||||
import expressSession from "express-session";
|
||||
import path from "path";
|
||||
|
||||
const isProduction = process.env.NODE_ENV === "production";
|
||||
const LAYOUTS_DIRECTORY = path.join(__dirname, "layouts");
|
||||
const PARTIALS_DIRECTORY = path.join(__dirname, "partials");
|
||||
const PUBLIC_DIRECTORY = path.join(__dirname, "public");
|
||||
const VIEWS_DIRECTORY = path.join(__dirname, "views");
|
||||
const cookieSecret = crypto.randomBytes(48).toString("hex");
|
||||
|
||||
export function startWebserver() {
|
||||
const app = express();
|
||||
app.disable("x-powered-by");
|
||||
|
||||
app.use((_req, res, next) => {
|
||||
res.header("Permissions-Policy", "interest-cohort=()");
|
||||
next();
|
||||
});
|
||||
|
||||
const noCache = (_req: Request, res: Response, next: NextFunction) => {
|
||||
res.header("Cache-Control", "no-cache");
|
||||
next();
|
||||
};
|
||||
|
||||
const sessionOptions: SessionOptions = {
|
||||
secret: cookieSecret,
|
||||
name: "Session",
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
unset: "destroy",
|
||||
cookie: {
|
||||
maxAge: 1000 * 60 * 60 * 24 * 7,
|
||||
signed: true,
|
||||
path: "/",
|
||||
httpOnly: true,
|
||||
sameSite: "lax",
|
||||
// If you are getting infinite redirects, set this to "false" if you don't have a HTTPS-only environment setup.
|
||||
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
app.use(expressSession(sessionOptions));
|
||||
app.use(express.urlencoded({ extended: true, limit: "1mb" }));
|
||||
app.use(express.json({ limit: "1mb" }));
|
||||
|
||||
const engine = new Liquid({
|
||||
root: [VIEWS_DIRECTORY, PARTIALS_DIRECTORY, LAYOUTS_DIRECTORY],
|
||||
cache: isProduction,
|
||||
lenientIf: true,
|
||||
jsTruthy: true,
|
||||
extname: ".liquid",
|
||||
});
|
||||
|
||||
app.engine("liquid", engine.express());
|
||||
app.set("views", [VIEWS_DIRECTORY, PARTIALS_DIRECTORY, LAYOUTS_DIRECTORY]);
|
||||
app.set("view engine", "liquid");
|
||||
|
||||
app.use("/public/", express.static(PUBLIC_DIRECTORY));
|
||||
|
||||
// 404
|
||||
app.use((req, res) => {
|
||||
if (req.accepts("html")) return res.status(404).render("404", { url: req.url, errorCode: 404 });
|
||||
else if (req.accepts("json")) return res.status(404).send({ error: "404" });
|
||||
else res.status(404).type("txt").send("404");
|
||||
});
|
||||
|
||||
app.listen(3430, "0.0.0.0", () => {
|
||||
console.log(`Webserver running on port 3430`);
|
||||
});
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Hello world!</title>
|
||||
|
||||
<!-- Links -->
|
||||
<link href="style.css" rel="stylesheet" type="text/css">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="cssloaded">Hello world!</h1>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8" crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,2 @@
|
|||
var rws = require("./Components/webserver.js");
|
||||
rws();
|
File diff suppressed because it is too large
Load Diff
17
package.json
17
package.json
|
@ -1,13 +1,6 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"express": "^4.18.1",
|
||||
"express-session": "^1.17.3",
|
||||
"liquidjs": "^9.42.0",
|
||||
"typescript": "^4.8.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.14",
|
||||
"@types/express-session": "^1.17.5",
|
||||
"@types/node": "^18.7.18"
|
||||
}
|
||||
}
|
||||
"dependencies": {
|
||||
"ejs": "^3.1.8",
|
||||
"express": "^4.18.1"
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": false,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"alwaysStrict": true,
|
||||
"baseUrl": "./Source",
|
||||
"checkJs": false,
|
||||
"declaration": false,
|
||||
"emitDecoratorMetadata": true,
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"importsNotUsedAsValues": "error",
|
||||
"incremental": true,
|
||||
"inlineSources": true,
|
||||
"lib": ["es2020"],
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"noEmit": false,
|
||||
"noEmitOnError": true,
|
||||
"noImplicitAny": true,
|
||||
"noImplicitReturns": false,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"outDir": "./dist",
|
||||
"pretty": true,
|
||||
"removeComments": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"sourceRoot": "/",
|
||||
"strict": true,
|
||||
"strictBindCallApply": true,
|
||||
"strictNullChecks": false,
|
||||
"suppressImplicitAnyIndexErrors": true,
|
||||
"target": "es2020",
|
||||
"typeRoots": ["./Source/typings"]
|
||||
},
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["Source/**/*"]
|
||||
}
|
Loading…
Reference in New Issue