https://github.com/vweevers/http-graceful
Gracefully open and close a http server, its sockets and perhaps a database
https://github.com/vweevers/http-graceful
Last synced: over 1 year ago
JSON representation
Gracefully open and close a http server, its sockets and perhaps a database
- Host: GitHub
- URL: https://github.com/vweevers/http-graceful
- Owner: vweevers
- License: mit
- Created: 2014-11-26T21:57:49.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2014-12-01T15:07:10.000Z (over 11 years ago)
- Last Synced: 2025-03-28T21:39:06.171Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 121 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://www.npmjs.org/package/async-eventemitter), 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:
```js
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:
```js
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](https://npmjs.org) do:
```
npm install http-graceful
```
## license
MIT