diff --git a/webserver/package.json b/webserver/package.json new file mode 100644 index 0000000..d9b0589 --- /dev/null +++ b/webserver/package.json @@ -0,0 +1,17 @@ +{ + "name": "webserver", + "version": "1.0.0", + "description": "", + "main": "webserver.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Sebastian Frank", + "license": "MIT", + "dependencies": { + "connect-history-api-fallback": "^1.6.0", + "express": "^4.17.2", + "http-proxy-middleware": "^2.0.2", + "morgan": "^1.10.0" + } +} \ No newline at end of file diff --git a/webserver/webserver.js b/webserver/webserver.js new file mode 100644 index 0000000..946c814 --- /dev/null +++ b/webserver/webserver.js @@ -0,0 +1,66 @@ +var express = require("express") +var morgan = require("morgan") +var { createProxyMiddleware } = require("http-proxy-middleware") +var historyFallback = require("connect-history-api-fallback") +var app = express() +app.use(morgan("dev")) + +var port = process.env.PORT || 3000 +var host = process.env.HOST || "0.0.0.0" +var api = process.env.API +var index = process.env.INDEX +var ssr = process.env.SSR + +var apiFrom = "" +var apiTo = "" + +if (api) { + var _api = api.split(":") + apiFrom = _api[0] + for (var i = 1; i < _api.length; i++) { + if (apiTo) apiTo = apiTo + ":" + apiTo = apiTo + _api[i] + } + + if (apiFrom && apiTo) { + console.log("using api: " + apiFrom + " -> " + apiTo) + var _pR = {} + _pR["^" + apiFrom] = "" + app.use( + apiFrom, + createProxyMiddleware({ + target: apiTo, + changeOrigin: true, + pathRewrite: _pR, + }) + ) + } +} + +app.use(express.static(process.env.WEBROOT || "/data")) + +if (ssr) { + console.log("using ssr via: " + ssr) + app.use( + createProxyMiddleware({ + target: ssr, + changeOrigin: true, + }) + ) +} + +if (index) { + console.log("using default index: " + index) + app.use(historyFallback({ index: index, verbose: true, disableDotRule: true })) + app.get(index, function (req, res) { + res.sendFile(index, { + root: process.env.WEBROOT || "/data", + }) + }) +} + +app.use(function (req, res, next) { + res.status(404).end() +}) + +var server = app.listen(port, host)