How to close an express and a websocket server on the git bash terminal close on Windows

24 Views Asked by At

I want my node.js app close on git bash terminal window close ( without pressing ctrl+c ) I tried SIGTERM SIGINT SIGHUP SIGWHATEVER, it doesn't work, the app won't exit, I get 'the port blabla is already in use, when trying to run it again'

here's the code

const server = app.listen(8000, () => {
    console.log(`Server is running on port 8000`);
});

process.on('SIGQUIT', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGQUIT');
    process.exit();
});
process.on('SIGTERM', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTERM');
    process.exit();
});
process.on('SIGINT', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGINT');
    process.exit();
});
process.on('SIGBREAK', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGBREAK');
    process.exit();
});
process.on('SIGHUP', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGHUP');
    process.exit();
});
process.on('SIGUSR1', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGUSR1');
    process.exit();
});
process.on('SIGUSR2', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGUSR2');
    process.exit();
});
process.on('SIGTTOU', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTTOU');
    process.exit();
});
process.on('SIGTTIN', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTTIN');
    process.exit();
});
process.on('SIGTSTP', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTSTP');
    process.exit();
});
process.on('SIGCHLD', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGCHLD');
    process.exit();
});
process.on('SIGTTOU', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTTOU');
    process.exit();
});
process.on('SIGTRAP', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGTRAP');
    process.exit();
});
process.on('SIGABRT', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGABRT');
    process.exit();
});
process.on('SIGFPE', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGFPE');
    process.exit();
});
process.on('SIGBUS', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGBUS');
    process.exit();
});
process.on('SIGSEGV', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGSEGV');
    process.exit();
});
process.on('SIGPIPE', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGPIPE');
    process.exit();
});
process.on('SIGSYS', () => {
    wss.close();
    server.close();
    writeFileSync('./1.txt', 'SIGSYS');
    process.exit();
});

I start the server with this script in my package.json "ts-node ./src/server/server.ts" and when it did start I just close the terminal, and nothing happens, when I reopen the terminal and start the server again I get

Error: listen EADDRINUSE: address already in use :::8080 at Server.setupListenHandle [as _listen2] (node:net:1893:16) at listenInCluster (node:net:1941:12) at Server.listen (node:net:2029:7) at new WebSocketServer (D:\coding\media-buyer-ui\node_modules\ws\lib\websocket-server.js:102:20) at Object. (D:\coding\media-buyer-ui\src\server\server.ts:32:13) at Module._compile (node:internal/modules/cjs/loader:1378:14) at Module.m._compile (D:\coding\media-buyer-ui\node_modules\ts-node\src\index.ts:1618:23) at Module._extensions..js (node:internal/modules/cjs/loader:1437:10) at Object.require.extensions. [as .ts] (D:\coding\media-buyer-ui\node_modules\ts-node\src\index.ts:1621:12) at Module.load (node:internal/modules/cjs/loader:1212:32) { code: 'EADDRINUSE', errno: -4091, syscall: 'listen', address: '::', port: 8080

0

There are 0 best solutions below