promised-http-server
A simple http server with an interface based on promises
Last updated 4 years ago by thomas-jensen .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install promised-http-server 
SYNC missed versions from official npm registry.

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

Current Tags

  • 5.0.0                                ...           latest (4 years ago)
  • 4.0.0                                ...           next (6 years ago)

8 Versions

  • 5.0.0                                ...           4 years ago
  • 4.0.1                                ...           5 years ago
  • 4.0.0                                ...           6 years ago
  • 3.0.2                                ...           6 years ago
  • 3.0.1                                ...           6 years ago
  • 2.0.3                                ...           6 years ago
  • 2.0.2                                ...           6 years ago
  • 2.0.1                                ...           6 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (6)
Dev Dependencies (0)
None
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |