npm install
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);
server.listening();
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
All 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
server: this, // server object
hrtime: process.hrtime(), // time of request
}
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);
case 'PUT':
return Promise
.resolve(someAsyncStuff)
.return({ saved: true });
case 'GET':
return { things: [] };
default:
throw HttpError(501); // not implemented
}
} else {
throw HttpError(404);
}
}, 80);
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`
});