@mattiash/http
v1.2.0
Published
Opinionated http(s) 1 and 2 server
Readme
@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.
- close() stops listening for new connections immediately.
- close() closes all idle persistent connections immediately.
- close() closes all non-idle connections as soon as the response to the current request has been sent.
- closeAsync() does the same thing as close and returns a promise that resolves when all connections have been closed.
- Works for http, https and http2.
- Has type-definitions for typescript.
- Has tests that check that it actually closes persistent connections correctly.
- Tests are run periodically on all supported versions of node, see travis for details.
API
The module exports
createHttpServerandcreateHttpsServerfor creating http and https-serverscreateHttp2ServerandcreateHttp2SecureServerfor creating http2 servers without and with TLS
All functions work the same as their counterparts
in node's http, https, and http2 modules,
but the returned object has been extended with extra methods.
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 extended 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.
Example
import { createHttpServer } from '@mattiash/http'
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.closeAsync()
console.log('Server has been shut down')
})
}
run()