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
$ npm install hurp-http-server
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);
}
}
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 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.
import { Options } from 'hurp-http-server';
An object, HttpServer
constructor options.
Will be used as module tag and passed as tag
field in bindings to child logger. Optional, value http-server
used by default.
Base logger used to create child logger for new HttpServer
instance.
Optional native Node.js http server instance. If undefined, a new one will be created by default.
Request handler, will be attached to wrapped native http server instance as request
event listener.
Options will be passed to listen()
method of http server instance.
import HttpServer from 'hurp-http-server';
A class, async module wrapper for native Node.js http server.
Creates a new HttpServer
instance.
options: Options
- instance options
Initializes the http server by opening a port. Will throw an error in a case with error
event from underlying native http server instance.
Closes listening port and waits for pending requests. All keep-alived connections with no pending requsts will be closed immediately.