how to properly close node-express server?
app.listen()
returns http.Server
. You should invoke close()
on that instance and not on app
instance.
Ex.
app.get( '/auth/github/callback', passport.authenticate('github', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); setTimeout(function () { server.close(); // ^^^^^^^^^^^ }, 3000) });var server = app.listen('http://localhost:5000/');
You can inspect sources: /node_modules/express/lib/application.js
In express v3 they removed this function.
You can still achieve the same by assigning the result of app.listen()
function and apply close on it:
var server = app.listen(3000);server.close()
If any error occurs in your express app then you must have to close the server and you can do that like below-
var app = express();var server = app.listen(process.env.PORT || 5000)
If any error occurs then our application will get a signal named SIGTERM
. You can read more SIGTERM here - https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html
process.on('SIGTERM', () => { console.info('SIGTERM signal received.'); console.log('Closing http server.'); server.close(() => { console.log('Http server closed.'); });});