Skip to content

Instantly share code, notes, and snippets.

@maxp
Last active August 15, 2018 14:51
Show Gist options
  • Save maxp/080931ecbb609f3f9aef18fbfff2f9a4 to your computer and use it in GitHub Desktop.
Save maxp/080931ecbb609f3f9aef18fbfff2f9a4 to your computer and use it in GitHub Desktop.
nodejs SIGTERM handling
//
// https://hackernoon.com/graceful-shutdown-in-nodejs-2f8f59d1c357
//
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.urlencoded({extended: true}));
app.use(express.json());
mongoose.connect('mongodb://localhost/test', (err) => {
if (err) throw err;
console.log('Mongoose connected!');
});
const User = mongoose.model('User', { name: String });
app.post('/user', async (req, res) => {
try {
const user = new User({ name: req.body.username });
await user.save();
res.send('Success!').status(201);
} catch (err) {
res.send(err.message).status(500);
}
});
const server = app.listen(3000, () => console.log('Example app listening on port 3000!'));
process.on('SIGTERM', () => {
console.info('SIGTERM signal received.');
console.log('Closing http server.');
server.close(() => {
console.log('Http server closed.');
// boolean means [force], see in mongoose doc
mongoose.connection.close(false, () => {
console.log('MongoDb connection closed.');
process.exit(0);
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment