Switch to EJS and bootstrap.

main
Nightly 2022-09-16 21:57:13 +02:00
parent e9aabe6a92
commit 7b7d2bb2ae
10 changed files with 1337 additions and 1445 deletions

3
.gitignore vendored
View File

@ -1,2 +1 @@
node_modules/
dist/
node_modules/

27
Components/webserver.js Normal file
View File

@ -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);
});
};

3
Public/style.css Normal file
View File

@ -0,0 +1,3 @@
#cssloaded {
color:deepskyblue;
}

View File

View File

@ -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`);
});
}

17
Templates/index.ejs Normal file
View File

@ -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>

2
index.js Normal file
View File

@ -0,0 +1,2 @@
var rws = require("./Components/webserver.js");
rws();

2595
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -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"
}
}

View File

@ -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/**/*"]
}