http-fantasy-land

3.0.0 • Public • Published

[WIP] http-fantasy-land

Build Status eh?

A web server library that allows you to create your server using functional concepts.

Getting Started

npm install --save http-fantasy-land
import {listen, get} from 'http-fantasy-land';
 
const home = (response, request) => ({
  ...response,
  statusCode: 200,
  body: 'It works!',
});
 
const router = composeRoutes(
  get('/', home),
);
 
listen(router, {port: 8080}).then(stop => {
  console.log('Listening @ http://localhost:8080');
});

API

route functions

A route is a function that, given a request object and a response object, returns a new response (or a promise that resolves to one).

[TODO: elaborate]

request

The request object is serialized, immutable representation of an http.IncomingMessage object.

{
  method: String,
  url: String,
  headers: {
    [key: String]: String,
  },
}

response

The response object is a serialized, immutable representation of an http.ServerResponse object.

{
  status: Number,
  body: String|Stream,
  headers: {
    [key: String]: String,
  },
}

listen

listen :: ((Object, Object) -> Object, Object) -> Promise<() -> void>

Description: Creates and starts a http/https server using the supplied route and options. Returns a promise that resolves to a stop() function.

Arguments
route :: (Object, Object) -> Object
A Route function. Accepts a response object and a request object. Returns a new response object.
options :: Object

Server Configuration Options. Accepts port, hostname, and backlog from http.listen, as well as any option accepted by https.createServer

See the links above for detailed descriptions of each option.

Return Value: Function - A function that stops the server.

Example:
listen(route, {port: 8080}).then(stop => {
  console.log('Listening @ http://localhost:8080');
  setTimeout(() => {
    stop();
    console.log('Server stopped!');
  }, 500);
});

composeRoutes(...routes) => route

sendFile(file) => route

setHeader(name)(value) => route

get('/path', route) => route

head('/path', route) => route

post('/path', route) => route

put('/path', route) => route

del('/path', route) => route

connect('/path', route) => route

options('/path', route) => route

trace('/path', route) => route

patch('/path', route) => route

Compatibility

[TODO: document usage w/ express/connect/etc.]

Readme

Keywords

none

Package Sidebar

Install

npm i http-fantasy-land

Weekly Downloads

11

Version

3.0.0

License

MIT

Last publish

Collaborators

  • spudly