-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathserver.ts
54 lines (40 loc) · 1.27 KB
/
server.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import express from "express";
import {resolve} from 'path';
async function app(appDir: string, lang: string): Promise<express.Express> {
const serverFolder = resolve(`${appDir}/server/${lang}`);
const {app}: { app: (appDir: string, lang: string) => express.Express } = await import(`${serverFolder}/server.mjs`);
return app(appDir, lang);
}
async function main() {
const port = process.env['PORT'] ?? 4000;
const appDir = process.env['APP_DIR'] ?? ".";
const server: express.Express = express();
const [de, en] = await Promise.all([
app(appDir, "de"),
app(appDir, "en")
]);
server.use("/de/", de);
server.use("/en/", en);
server.all("*", (req, res) => {
const languages = req.acceptsLanguages();
let target = 'en';
if (languages) {
for (let language of languages) {
if (language.indexOf('-') == 2) {
language = language.substring(0, 2);
}
language = language.toLowerCase();
if (language === 'de') {
target = 'de';
break;
} else if (language === 'en') {
target = 'en';
break;
}
}
}
res.redirect(`/${target}${req.url}`)
});
server.listen(port, () => console.log(`Listening on http://127.0.0.1:${port}...`));
}
main().then();