Skip to content

A simple http server with an interface based on promises

Notifications You must be signed in to change notification settings

srcagency/promised-http-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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`
	});

About

A simple http server with an interface based on promises

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published