Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/articulate/paperplane
- Owner: articulate
- License: mit
- Created: 2017-01-12T23:26:38.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-12-12T02:44:36.000Z (about 1 year ago)
- Last Synced: 2024-12-16T21:11:41.229Z (10 days ago)
- Topics: functional-programming, javascript, nodejs, paperplane, server
- Language: JavaScript
- Homepage:
- Size: 985 KB
- Stars: 134
- Watchers: 64
- Forks: 11
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Lighter-than-air node.js server framework.
## 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