Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/articulate/paperplane

Lighter-than-air node.js server framework
https://github.com/articulate/paperplane

functional-programming javascript nodejs paperplane server

Last synced: 3 days ago
JSON representation

Lighter-than-air node.js server framework

Awesome Lists containing this project

README

        


paperplane



Lighter-than-air node.js server framework.



npm version npm downloads Build Status Coverage Status

## Documentation

- [Getting started guide](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md)
- [API docs](https://github.com/articulate/paperplane/blob/master/docs/API.md)
- [Migration guide](https://github.com/articulate/paperplane/blob/master/docs/migration-guide.md)

## Introduction

The main goal of `paperplane` is to make building a `node.js` server easy, without all of the configuration or imperative boilerplate required for other server frameworks. If you prefer to build apps with function composition or even a point-free style, then `paperplane` is for you.

With `paperplane` you get all of these out-of-the-box:

- pure, functional, Promise-based [request handlers](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#basic-concepts)
- support for request handlers that return [Algebraic Data Types](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#what-are-algebraic-data-types) - **new in v2.0**
- support for highly scalable [serverless deployment](https://github.com/articulate/paperplane/blob/master/docs/API.md#serverless-deployment) - **new in v2.1**
- composeable json [body parsing](https://github.com/articulate/paperplane/blob/master/docs/API.md#parsejson)
- dead-simple [routing functions](https://github.com/articulate/paperplane/blob/master/docs/API.md#routes)
- several common [response helpers](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md#response-object)
- json-formatted [logging](https://github.com/articulate/paperplane/blob/master/docs/API.md#logger)
- easily configurable [CORS support](https://github.com/articulate/paperplane/blob/master/docs/API.md#cors)
- plug-n-play [static file serving](https://github.com/articulate/paperplane/blob/master/docs/API.md#serve)

Let's try a quick Hello World example server. It accepts a `:name` param in the url, and then includes that name in the `json` response body.

```js
const { compose } = require('ramda')
const http = require('http')
const { json, logger, methods, mount, routes } = require('paperplane')

const hello = req => ({
message: `Hello ${req.params.name}!`
})

const app = routes({
'/hello/:name': methods({
GET: compose(json, hello)
})
})

http.createServer(mount({ app })).listen(3000, logger)
```

So simple and functional, with an easily readable routing table and pure functions for the route handler. If that sounds like fun to you, then read the [Getting started guide](https://github.com/articulate/paperplane/blob/master/docs/getting-started.md) or the [API docs](https://github.com/articulate/paperplane/blob/master/docs/API.md) to learn more.

## Example application

To help you learn the concepts used in paperplane, check out the [demo application](https://github.com/articulate/paperplane/blob/master/demo).

If you have docker installed, you can run the demo locally:

1. Clone this repo
1. If you're using Docker Desktop for Windows:
- `cp docker-compose.override.windows.yml docker-compose.override.yml`
1. `docker-compose up`
1. http://localhost:3000