@mattiash/http
Opinionated http(s) server.
This module implements an http/https-server that behaves the way I think it should behave:
- Allow use of persistent connections
- listenAsync() returns a promise that resolves with AddressInfo when the server is listening.
- closeAsync() stops listening for new connections immediately
- closeAsync() closes all idle persistent connections immediately
- closeAsync() closes all non-idle connections as soon as the response to the
current request has been sent.
- closeAsync() returns a promise that resolves when all connections have been closed
- Works for http as well as https
- Has type-definitions for typescript.
- Has tests that check that it actually closes persistent connections correctly.
API
The module exports two functions, createHttpServer and createHttpsServer.
createHttpServer
Takes a requestListener argument that is passed unmodified to node's http.createServer.
Returns an an object that inherits from node's http.Server
and extends it with the following two methods:
listenAsync
Starts listening for new connections.
Takes the same arguments as http.Server.listen.
Returns a promise that resolves with the result of http.Server.address()
when the server is actually listening.
closeAsync()
Closes the server as described above.
Returns a promise that resolves when the server has stopped listening
and all persistent connections have been closed.
createHttpsServer
Same as createHttpServer but for https.
Example
import { createHttpServer } from 'graceful-http-server'
let srv = createHttpServer((_req, res) => {
res.writeHead(200)
res.end('okay')
})
async function run() {
let address = await srv.listenAsync()
console.log(`Listening on port ${address.port}`)
process.on('SIGINT', async () => {
await srv.shutdownAsync()
console.log('Server has been shut down')
})
}
run()