diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/ActionUtilities.ts | 6 | ||||
-rw-r--r-- | src/server/Initialization.ts | 29 | ||||
-rw-r--r-- | src/server/Websocket/Websocket.ts | 3 | ||||
-rw-r--r-- | src/server/database.ts | 11 | ||||
-rw-r--r-- | src/server/index.ts | 2 |
5 files changed, 25 insertions, 26 deletions
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts index c155796a8..4fe7374d1 100644 --- a/src/server/ActionUtilities.ts +++ b/src/server/ActionUtilities.ts @@ -72,4 +72,8 @@ export async function Prune(rootDirectory: string): Promise<boolean> { return error === null; } -export const Destroy = (mediaPath: string) => new Promise<boolean>(resolve => fs.unlink(mediaPath, error => resolve(error === null)));
\ No newline at end of file +export const Destroy = (mediaPath: string) => new Promise<boolean>(resolve => fs.unlink(mediaPath, error => resolve(error === null))); + +export function addBeforeExitHandler(handler: NodeJS.BeforeExitListener) { + process.on("beforeExit", handler); +} diff --git a/src/server/Initialization.ts b/src/server/Initialization.ts index 74770153d..1fb949221 100644 --- a/src/server/Initialization.ts +++ b/src/server/Initialization.ts @@ -19,7 +19,7 @@ import * as fs from 'fs'; import * as request from 'request'; import RouteSubscriber from './RouteSubscriber'; import { publicDirectory } from '.'; -import { logPort } from './ActionUtilities'; +import { logPort, addBeforeExitHandler } from './ActionUtilities'; import { timeMap } from './ApiManagers/UserManager'; import { blue, yellow } from 'colors'; @@ -27,18 +27,18 @@ import { blue, yellow } from 'colors'; from being exposed. */ export type RouteSetter = (server: RouteManager) => void; export interface InitializationOptions { - listenAtPort: number; + serverPort: number; routeSetter: RouteSetter; } export default async function InitializeServer(options: InitializationOptions) { - const { listenAtPort, routeSetter } = options; - const server = buildWithMiddleware(express()); + const { serverPort, routeSetter } = options; + const app = buildWithMiddleware(express()); - server.use(express.static(publicDirectory)); - server.use("/images", express.static(publicDirectory)); + app.use(express.static(publicDirectory)); + app.use("/images", express.static(publicDirectory)); - server.use("*", ({ user, originalUrl }, _res, next) => { + app.use("*", ({ user, originalUrl }, _res, next) => { if (!originalUrl.includes("Heartbeat")) { const userEmail = user?.email; if (userEmail) { @@ -48,19 +48,20 @@ export default async function InitializeServer(options: InitializationOptions) { next(); }); - server.use(wdm(compiler, { publicPath: config.output.publicPath })); - server.use(whm(compiler)); + app.use(wdm(compiler, { publicPath: config.output.publicPath })); + app.use(whm(compiler)); - registerAuthenticationRoutes(server); - registerCorsProxy(server); + registerAuthenticationRoutes(app); + registerCorsProxy(app); const isRelease = determineEnvironment(); - routeSetter(new RouteManager(server, isRelease)); + routeSetter(new RouteManager(app, isRelease)); - server.listen(listenAtPort, () => { - logPort("server", listenAtPort); + const server = app.listen(serverPort, () => { + logPort("server", serverPort); console.log(); }); + addBeforeExitHandler(async () => { await new Promise<Error>(resolve => server.close(resolve)); }); return isRelease; } diff --git a/src/server/Websocket/Websocket.ts b/src/server/Websocket/Websocket.ts index 2eb764945..60c34aa44 100644 --- a/src/server/Websocket/Websocket.ts +++ b/src/server/Websocket/Websocket.ts @@ -7,7 +7,7 @@ import { Search } from "../Search"; import * as io from 'socket.io'; import YoutubeApi from "../apis/youtube/youtubeApiSample"; import { GoogleCredentialsLoader } from "../credentials/CredentialsLoader"; -import { logPort } from "../ActionUtilities"; +import { logPort, addBeforeExitHandler } from "../ActionUtilities"; import { timeMap } from "../ApiManagers/UserManager"; import { green } from "colors"; @@ -53,6 +53,7 @@ export namespace WebSocket { Utils.AddServerHandlerCallback(socket, MessageStore.GetRefField, GetRefField); Utils.AddServerHandlerCallback(socket, MessageStore.GetRefFields, GetRefFields); }); + addBeforeExitHandler(async () => { await new Promise<void>(resolve => endpoint.close(resolve)); }); endpoint.listen(socketPort); logPort("websocket", socketPort); } diff --git a/src/server/database.ts b/src/server/database.ts index 4039e6203..5bdf1fc45 100644 --- a/src/server/database.ts +++ b/src/server/database.ts @@ -6,6 +6,7 @@ import { DashUploadUtils } from './DashUploadUtils'; import { Credentials } from 'google-auth-library'; import { GoogleApiServerUtils } from './apis/google/GoogleApiServerUtils'; import * as mongoose from 'mongoose'; +import { addBeforeExitHandler } from './ActionUtilities'; export namespace Database { @@ -24,18 +25,10 @@ export namespace Database { export async function tryInitializeConnection() { try { const { connection } = mongoose; - process.on('SIGINT', () => { - connection.close(() => { - console.log(`SIGINT closed mongoose connection at ${url}`); - process.exit(0); - }); - }); + addBeforeExitHandler(async () => { await new Promise<any>(resolve => connection.close(resolve)); }); if (connection.readyState === ConnectionStates.disconnected) { await new Promise<void>((resolve, reject) => { connection.on('error', reject); - connection.on('disconnected', () => { - console.log(`disconnecting mongoose connection at ${url}`); - }); connection.on('connected', () => { console.log(`mongoose established default connection at ${url}`); resolve(); diff --git a/src/server/index.ts b/src/server/index.ts index 2921ad2df..cef6ff476 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -111,5 +111,5 @@ function routeSetter({ isRelease, addSupervisedRoute, logRegistrationOutcome }: endMessage: "completed preliminary functions\n", action: preliminaryFunctions }); - await initializeServer({ listenAtPort: 1050, routeSetter }); + await initializeServer({ serverPort: 1050, routeSetter }); })(); |