A continuación se muestra un script básico que suelo usar para mis servidores express. Específicamente, estoy buscando respuestas a las siguientes preguntas: ¿Es necesario incluir manejadores de señales de proceso SIGINT y SIGTERM en producción? ¿Debo incluir realmente un controlador de excepciones no detectado? ¿Qué pasa con el seguimiento y la limpieza de los enchufes? ¿Uso process.exit(), process.exit(0) o process.exit(1), y si es así, ¿dónde exactamente y por qué?
var express = require('express'); var sockets = []; process.on('SIGINT', cleanup); process.on('SIGTERM', cleanup); var port = 7000; var app = express(); var server = app.listen(port, function () { console.log(`app listening on port ${port}`); }) .on("connection", onConnection) .on("listening", onListening) .on("error", onError) .on("close", onClose); var cleanup = function () { server.close(function () { console.log("Closed out remaining connections."); process.exit(); }); sockets.forEach(function (socket) { socket.destroy(); }); setTimeout(function () { console.log("Could not close connections in time, forcing shut down"); process.exit(1); }, 30 * 1000); } function onConnection(socket) { sockets.push(socket); } function onError(error) { if (error.syscall !== 'listen') throw error; var bind = typeof port === 'string'? 'Pipe ' + port : 'Port ' + port; switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } function onListening() { var addr = server.address(); var bind = typeof addr === 'string'? 'pipe ' + addr : 'port ' + addr.port; console.log('Listening on ' + bind); }