Bird
Raised Fist0
Expressframework~5 mins

Graceful shutdown handling in Express - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is graceful shutdown in an Express server?
Graceful shutdown means stopping the server without abruptly cutting off active connections. It waits for ongoing requests to finish before closing.
Click to reveal answer
beginner
Which Node.js event is commonly used to trigger graceful shutdown?
The 'SIGINT' signal is often used. It signals the app to start cleanup before exiting, like when you press Ctrl+C in the terminal.
Click to reveal answer
intermediate
Why should you close the HTTP server during graceful shutdown?
Closing the HTTP server stops it from accepting new requests but lets existing requests finish, preventing sudden disconnections.
Click to reveal answer
intermediate
How can you handle cleanup tasks like closing database connections during shutdown?
You add cleanup code inside the shutdown handler to close resources like database connections or file streams before exiting.
Click to reveal answer
beginner
What happens if you don't implement graceful shutdown in an Express app?
The server may drop active requests abruptly, causing errors for users and possible data loss or corruption.
Click to reveal answer
Which method stops an Express server from accepting new requests during shutdown?
Aapp.close()
Bserver.stop()
Cserver.close()
Dapp.shutdown()
What Node.js signal is typically used to initiate graceful shutdown?
ASIGINT
BSIGKILL
CSIGSTOP
DSIGCONT
Why is it important to wait for ongoing requests to finish during shutdown?
ATo block new users from connecting
BTo speed up server restart
CTo free memory immediately
DTo avoid losing data or causing errors for users
Where should you place code to close database connections during shutdown?
AInside the shutdown handler function
BIn the main app setup
CIn the request handler
DIn the server.listen callback
What happens if you call process.exit() immediately without cleanup?
AThe app waits for requests to finish
BThe app exits abruptly, possibly causing errors
CThe server restarts automatically
DThe app logs out users safely
Explain how to implement graceful shutdown in an Express server.
Think about stopping new requests, finishing current ones, and cleaning resources.
You got /5 concepts.
    Why is graceful shutdown important in web servers like Express?
    Consider what happens if the server stops suddenly.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of implementing graceful shutdown in an Express server?
      easy
      A. To allow the server to finish handling current requests before stopping
      B. To restart the server automatically after a crash
      C. To speed up server startup time
      D. To block all incoming requests permanently

      Solution

      1. Step 1: Understand graceful shutdown concept

        Graceful shutdown means the server stops accepting new requests but finishes processing ongoing ones.
      2. Step 2: Identify the purpose in Express context

        In Express, this prevents dropping requests abruptly when stopping the server.
      3. Final Answer:

        To allow the server to finish handling current requests before stopping -> Option A
      4. Quick Check:

        Graceful shutdown = finish requests before stop [OK]
      Hint: Graceful shutdown means finishing requests before exit [OK]
      Common Mistakes:
      • Thinking it restarts the server automatically
      • Confusing it with startup speed
      • Believing it blocks all requests permanently
      2. Which of the following is the correct way to start listening for a shutdown signal in an Express app?
      easy
      A. express.shutdown('SIGINT', () => { /* shutdown code */ });
      B. server.listen('SIGINT', () => { /* shutdown code */ });
      C. app.shutdown('SIGINT', () => { /* shutdown code */ });
      D. process.on('SIGINT', () => { /* shutdown code */ });

      Solution

      1. Step 1: Identify how Node.js listens for signals

        Node.js uses process.on('signal', callback) to listen for OS signals like SIGINT.
      2. Step 2: Confirm Express does not have shutdown method

        Express app or server does not have shutdown methods; signal handling is done on process.
      3. Final Answer:

        process.on('SIGINT', () => { /* shutdown code */ }); -> Option D
      4. Quick Check:

        Signal listening uses process.on [OK]
      Hint: Use process.on to catch shutdown signals [OK]
      Common Mistakes:
      • Using server.listen for signals
      • Calling shutdown on app or express object
      • Confusing signal handling with server methods
      3. Consider this Express server code snippet:
      const express = require('express');
      const app = express();
      const server = app.listen(3000);
      
      process.on('SIGTERM', () => {
        server.close(() => {
          console.log('Server closed');
        });
      });
      
      console.log('Server running');

      What will happen when the process receives a SIGTERM signal?
      medium
      A. The server stops accepting new requests and logs 'Server closed' after finishing current requests
      B. The server immediately crashes without logging anything
      C. The server ignores the SIGTERM signal and keeps running
      D. The server restarts automatically

      Solution

      1. Step 1: Analyze signal handler code

        On SIGTERM, server.close() is called with a callback that logs 'Server closed'.
      2. Step 2: Understand server.close behavior

        server.close stops new connections but waits for ongoing requests to finish before calling the callback.
      3. Final Answer:

        The server stops accepting new requests and logs 'Server closed' after finishing current requests -> Option A
      4. Quick Check:

        SIGTERM triggers server.close with log after finish [OK]
      Hint: server.close waits for requests before callback [OK]
      Common Mistakes:
      • Assuming immediate crash on SIGTERM
      • Thinking server restarts automatically
      • Believing server ignores SIGTERM
      4. This code attempts graceful shutdown but has a bug:
      const express = require('express');
      const app = express();
      const server = app.listen(3000);
      
      process.on('SIGINT', () => {
        server.close();
        console.log('Server closed');
        process.exit(0);
      });

      What is the problem with this shutdown code?
      medium
      A. It should call app.close() instead of server.close()
      B. It calls process.exit(0) immediately, not waiting for server.close to finish
      C. It does not listen on the correct port
      D. It uses SIGINT instead of SIGTERM, which is invalid

      Solution

      1. Step 1: Understand server.close asynchronous behavior

        server.close is asynchronous and takes a callback to run after closing.
      2. Step 2: Identify premature exit call

        process.exit(0) is called immediately after server.close without waiting, so server may not close properly.
      3. Final Answer:

        It calls process.exit(0) immediately, not waiting for server.close to finish -> Option B
      4. Quick Check:

        Must wait for server.close callback before exit [OK]
      Hint: Wait for server.close callback before exiting process [OK]
      Common Mistakes:
      • Thinking SIGINT is invalid signal
      • Confusing app.close with server.close
      • Ignoring asynchronous nature of server.close
      5. You want to implement graceful shutdown in an Express app that also uses a database connection. Which approach correctly ensures both server and database close properly before exiting?
      hard
      A. Call process.exit() immediately on SIGINT, then close server and database asynchronously
      B. Close database connection first, then call server.close(), ignoring process signals
      C. Listen for SIGINT, call server.close(), then close database in server.close callback, finally call process.exit()
      D. Restart the server automatically on SIGINT without closing connections

      Solution

      1. Step 1: Handle SIGINT signal properly

        Listen for SIGINT to start graceful shutdown process.
      2. Step 2: Close server and then database sequentially

        Call server.close() to finish requests, then in its callback close the database connection.
      3. Step 3: Exit process after all resources are closed

        Call process.exit() only after both server and database are closed to avoid abrupt termination.
      4. Final Answer:

        Listen for SIGINT, call server.close(), then close database in server.close callback, finally call process.exit() -> Option C
      5. Quick Check:

        Shutdown sequence: server.close -> db.close -> exit [OK]
      Hint: Close server then DB before exiting on signal [OK]
      Common Mistakes:
      • Exiting process before closing resources
      • Ignoring database closure
      • Restarting server instead of shutting down
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard