diff --git a/README.md b/README.md index 8a1b337..ee6a0fe 100644 --- a/README.md +++ b/README.md @@ -28,5 +28,7 @@ PORT=3000 BASE_PATH=/api # defines ips that are allowed as proxy ips # See http://expressjs.com/en/guide/behind-proxies.html -TRUST_PROXY_ID= +TRUST_PROXY= +# set to true to disable /api-Endpoint. will also diable frontend. +DISABLE_DEFAULT_API_ENDPOINT= ``` diff --git a/backend/src/app.ts b/backend/src/app.ts index 1a42cd4..82184db 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -3,19 +3,26 @@ import nodesched from 'node-schedule'; import morgan from 'morgan'; import router from './router'; import wxService from './services/wx.service'; - -const { PORT = 3000, BASE_PATH = '/api', TRUST_PROXY_IP = false } = process.env; +import appConfig from './config'; const app = express(); -app.set('trust proxy', TRUST_PROXY_IP); +const config = appConfig(); + +app.set('trust proxy', config.trustProxy); app.use(morgan('combined')); -app.use(BASE_PATH, router.router); +if (config.apiBasePath) { + app.use(config.apiBasePath, router.router); +} + +if (!config.disableDefaultApiEndpoint) { + app.use('/api', router.router); -const frontendRoot = '/opt/frontend/dist'; -app.use(express.static(frontendRoot)); -app.use((req, res) => res.sendFile(`${frontendRoot}/index.html`)); + const frontendRoot = '/opt/frontend/dist'; + app.use(express.static(frontendRoot)); + app.use((req, res) => res.sendFile(`${frontendRoot}/index.html`)); +} // eslint-disable-next-line @typescript-eslint/no-unused-vars app.use((err, req: Request, res: Response, next: NextFunction) => { @@ -28,13 +35,13 @@ app.use((err, req: Request, res: Response, next: NextFunction) => { nodesched.scheduleJob('regenerate data', '*/30 * * * * *', wxService.wrappedGenerateData); wxService.wrappedGenerateData(); -const server = app.listen(PORT, () => { +const server = app.listen(config.port, () => { console.log( - `application is listening on port ${PORT}`, + `application is listening on port ${config.port}`, ); }); -const shutdown = (signal: string) => { +function processShutdown(signal: string) { console.log(`${signal} signal received. Shutting down.`); server.close((err) => { if (err) { @@ -45,7 +52,6 @@ const shutdown = (signal: string) => { console.log('Server closed'); process.exit(0); }); -}; +} -process.on('SIGTERM', () => shutdown('SIGTERM')); -process.on('SIGINT', () => shutdown('SIGINT')); +['SIGTERM', 'SIGINT'].map(signal => process.on(signal, processShutdown.bind(undefined, signal))); diff --git a/backend/src/config.ts b/backend/src/config.ts new file mode 100644 index 0000000..6e920bc --- /dev/null +++ b/backend/src/config.ts @@ -0,0 +1,28 @@ +export interface Config { + port: number; + apiBasePath: string; + disableDefaultApiEndpoint: boolean; + trustProxy: string | boolean; +} + +export default function appConfig(): Config { + const { + PORT, + BASE_PATH, + TRUST_PROXY, + DISABLE_DEFAULT_API_ENDPOINT, + } = process.env; + + let trustProxy: string | boolean = false; + + if (TRUST_PROXY == '*') { + trustProxy = true; + } + + return { + port: Number(PORT ?? 3000), + apiBasePath: BASE_PATH ?? '', + trustProxy, + disableDefaultApiEndpoint: DISABLE_DEFAULT_API_ENDPOINT == 'true', + }; +}