5.1.0 • Published 3 years ago

promised-http-server v5.1.0

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

Promised http server

Install

npm install

Use

var server = new HttpServer([ handler[, listen ]]);

Where handler (optional) is a function to handle requests

listen (optional) will be passed on to http.Server.listen

By default the server will respond with 404 on all requests and won't listen anywhere

server.listen(listen);

See http.Server.listen

Returns a promise which is resolved with the address listened on.

server.handleRequest = fn;
server.handleResult = fn;
server.handleHttpError = fn;
server.handleFatalError = fn;

Where fn is a function

All handlers have default implementations and they are listed here in the same order as they are called during a request

A handler can return a promise which will then be resolved before passed to the next handler

handleRequest will be called with arguments request, response, id

All other handlers will be called with a context of the format:

{
	id: Integer,					// unique request id
	request: http.ClientRequest,	// request object
	response: http.ServerResponse,	// response object
}

handleResult will be called with whatever handleRequest returned. The default implementation handles HttpResponse and HttpError correctly and casts everything else to a string before sending it to the client.

handleHttpError receives any thrown HttpError while handleFatalError receives any other error.

Example

var HttpServer = require('promised-http-server');
var HttpError = HttpServer.Error;

new HttpServer(function(){
	if (this.request.url === '/things') {
		switch (this.request.method) {
			case 'POST':
				return saveThingFromRequest(this.request)
					.return(HttpResponse(204));
			case 'PUT':
				return Promise
					.resolve(someAsyncStuff)
					.return({ saved: true });
			case 'GET':
				return { things: [] };
			default:
				throw HttpError(501); // not implemented
		}
	} else {
		throw HttpError(404);
	}
}, 80);

For tests

In a test you might do something along the lines of this

var tap = require('tap');

var server = require('../src');
server.listen(0);

tap.on('end', function(){
	server.close();
});

var address = server.listening();

address
	.then(function( addr ){
		// ready to test the server at `addr`
	});
5.1.0

3 years ago

5.0.0

10 years ago

4.0.1

10 years ago

4.0.0

11 years ago

3.0.2

11 years ago

3.0.1

11 years ago

2.0.3

12 years ago

2.0.2

12 years ago

2.0.1

12 years ago