@mattiash/http
v1.2.0
Published
Opinionated http(s) 1 and 2 server
Downloads
2
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
createHttpServer
andcreateHttpsServer
for creating http and https-serverscreateHttp2Server
andcreateHttp2SecureServer
for 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()