1.2.0 • Published 2 years ago

@mattiash/http v1.2.0

Weekly downloads
16
License
ISC
Repository
github
Last release
2 years ago

@mattiash/http

NPM Version Build Status Coverage Status

Opinionated http(s) server.

This module implements an http/https-server that behaves the way I think it should behave:

  1. Allow use of persistent connections.
  2. listenAsync() returns a promise that resolves with AddressInfo when the server is listening.
  3. close() stops listening for new connections immediately.
  4. close() closes all idle persistent connections immediately.
  5. close() closes all non-idle connections as soon as the response to the current request has been sent.
  6. closeAsync() does the same thing as close and returns a promise that resolves when all connections have been closed.
  7. Works for http, https and http2.
  8. Has type-definitions for typescript.
  9. Has tests that check that it actually closes persistent connections correctly.
  10. Tests are run periodically on all supported versions of node, see travis for details.

API

The module exports

  • createHttpServer and createHttpsServer for creating http and https-servers
  • createHttp2Server and createHttp2SecureServer 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()
1.2.0

2 years ago

1.1.2

4 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.2

5 years ago

1.0.1

6 years ago

1.0.0

6 years ago