1.0.4 • Published 5 years ago

hurp-http-server v1.0.4

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

hurp-http-server

npm

Async module wrapper for native Node.js http.Server with graceful shutdown.

More about Hurp and how to use it:
https://github.com/yaroslav-korotaev/hurp

Installation

$ npm install hurp-http-server

Usage

In a Hurp-Based Application

import Hurp from 'hurp';
import HttpServer from 'hurp-http-server';
import { Log } from 'hurp-types';

export interface Options {
  log: Log;
}

export default class App extends Hurp {
  public readonly server: HttpServer;
  
  constructor(options: Options) {
    super();
    
    const server = new HttpServer({
      log: options.log,
      handler: (req, res) => res.end('hello, world'),
      listen: {
        host: 'localhost',
        port: 3000,
      },
    });
    this.server = this.use(server);
  }
}

Standalone

import pino from 'pino';
import HttpServer from 'hurp-http-server';

async function main() {
  const log = pino();
  
  const server = new HttpServer({
    log,
    handler: (req, res) => res.end('hello, world'),
    listen: {
      host: 'localhost',
      port: 3000,
    },
  });
  
  // Start listening
  await server.init();
  
  // Shutdown gracefully
  // await server.destroy();
}

Logger

Logger instance must be compatible with that interface:

interface Log {
  child(bindings: { [key: string]: any }): Log;
  info(message: string): void;
}

This approach is inspired by Bunyan. You can use a compatible logger like pino directly or write a simple wrapper around any other you like.

Types

Options

import { Options } from 'hurp-http-server';

An object, HttpServer constructor options.

tag?: string

Will be used as module tag and passed as tag field in bindings to child logger. Optional, value http-server used by default.

log: Log

Base logger used to create child logger for new HttpServer instance.

server?: http.Server

Optional native Node.js http server instance. If undefined, a new one will be created by default.

handler: (req: http.IncomingMessage, res: http.ServerResponse) => void

Request handler, will be attached to wrapped native http server instance as request event listener.

listen?: net.ListenOptions

Options will be passed to listen() method of http server instance.

API

HttpServer

import HttpServer from 'hurp-http-server';

A class, async module wrapper for native Node.js http server.

constructor(options: Options)

Creates a new HttpServer instance.

options: Options - instance options

async init(): Promise<void>

Initializes the http server by opening a port. Will throw an error in a case with error event from underlying native http server instance.

async destroy(): Promise<void>

Closes listening port and waits for pending requests. All keep-alived connections with no pending requsts will be closed immediately.

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago