You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I want to ensure there is no brute (sub-)process termination and that any open requests are fulfilled when the Express server is closing.
// POST endpoint to process the shopping cart
app.post('/purchase', (req, res) => {
// Get the items from the request body
try {
const { buyer, items } = req.body;
// Process the items (e.g., calculate total price, initiate payment, etc.)
const totalPrice = calculateTotalPrice(items);
// Charge the buyer for the purchase
const payment = chargeBuyerForPurchase(totalPrice);
// 🥷 I don't want the server to close before it executes this line for every request
// Create shipping for the purchased items
const shipping = carrierAPI.createShipping(items, buyer.address);
res.status(200).json([totalPrice, payment, shipping]);
// 💁♂️ This is now safe to close the server
} catch (error) {
next(error);
}
});
// ./src/app.ts
import process from 'node:process';
// Begin reading from stdin so the process does not exit.
process.stdin.resume();
process.on('SIGINT', () => {
console.log('Received SIGINT. Press Control-D to exit.');
});
// FYI docker "stop" <container>, a process manager, and most hosts will send SIGTERM signal when it is shutting down.
// server.close stops the server from accepting new connections and closes all connections connected to this server that are not sending a request or waiting for a response
function gracefulClose(signal) {
console.log(`Received ${signal}`);
const server = this.app.listen(this.port, () => { ... } );
server.close( () => { log('HTTP(S) server closed') } );
}
process.on('SIGINT', gracefulClose);
process.on('SIGTERM', gracefulClose);
Is it a feature to implement? Is this feature redundant?
The text was updated successfully, but these errors were encountered:
Graceful close
Motivation
I want to ensure there is no brute (sub-)process termination and that any open requests are fulfilled when the Express server is closing.
Proposed Solution
See documentation at this link
Is it a feature to implement? Is this feature redundant?
The text was updated successfully, but these errors were encountered: