http-graceful

1.0.0 • Public • Published

http-graceful

Gracefully open and close a http server, its sockets and perhaps a database.

about

Creates a function start that creates and opens a http server. Because start is an AsyncEventEmitter, you can add hooks, e.g. to open a database, that execute before or after the http server is opened. Likewise, you can add hooks that execute before or after the server is closed - either with start.close() or if the process receives a termination signal. Optionally, http-graceful will also close open connections.

Note that if you don't call start, it will start in the next tick. Say you have an app.js, which exports start, like so:

var app = express()
 
var start = module.exports = httpGraceful(app, {
  close_sockets: true,
  sockets_timeout: 100
})
 
start.on('before listen', function(opts, next){
  openMyDatabase(function(err, db){
    app.db = db
    next(err)
  })
})
 
// There's also a "before close" event, but
// let's be safe and close the database 
// after all sockets have been closed.
start.on('close', function(opts, next){
  app.db.close(next)
})

To start the server, the usual still works: node app.js. But also, in some other file:

var start = require('./app')
 
// Bonus: you can override options
start({sockets_timeout: 200}, function(err, app){
   // Server has started, database is open
   doSomething()
 
   // Or add your own options
   start.close({foo: 'bar'}, function(){ 
      //..
   })
})
 
// Without a callback argument, events are
// synchronous (see `async-eventemitter`)
start.once('before close', function(opts){
  assert(opts.foo==='bar')
})

If you call start when the server has already started, your callback will be called immediately and no events will be emitted. Same goes for start.close().

See also the examples:

DEBUG=http-graceful node example/app.js 
DEBUG=http-graceful node example/app-consumer.js 

install

With npm do:

npm install http-graceful

license

MIT

Dependents (0)

Package Sidebar

Install

npm i http-graceful

Weekly Downloads

3

Version

1.0.0

License

MIT

Last publish

Collaborators

  • vweevers