Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/fortunejs/fortune-http

HTTP integration for Fortune.js.
https://github.com/fortunejs/fortune-http

http-server

Last synced: about 2 months ago
JSON representation

HTTP integration for Fortune.js.

Awesome Lists containing this project

README

        

# Fortune HTTP

![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/fortunejs/fortune-http/test.yml)
[![npm Version](https://img.shields.io/npm/v/fortune-http.svg?style=flat-square)](https://www.npmjs.com/package/fortune-http)
[![License](https://img.shields.io/npm/l/fortune-http.svg?style=flat-square)](https://raw.githubusercontent.com/fortunejs/fortune-http/master/LICENSE)

This is a HTTP implementation for Fortune.js, which includes default serializers for JSON, HTML, form encoded and form data. **This module is required for other HTTP serializers.**

```sh
$ npm install fortune-http --save
```

## Usage

Consult the [source code](https://github.com/fortunejs/fortune-http/tree/master/lib) or the [documentation website](http://fortune.js.org/api) for more information.

```js
// Use the Node.js core HTTP implementation.
const http = require('http')

// The alternative `uWS.http` implementation may be supported:
// const http = require('uws').http

const fortuneHTTP = require('fortune-http')

// Pass in a Fortune instance and an optional options object.
const listener = fortuneHTTP(fortuneInstance, options)

const server = http.createServer((request, response) =>
listener(request, response)
// Make sure to catch Promise rejections.
.catch(error => {
console.error(error.stack)
}))
```

For use with middleware frameworks such as Express:

```js
const express = require('express')
const fortuneHTTP = require('fortune-http')

const app = express()
const listener = fortuneHTTP(fortuneInstance, options)

// Make sure that the Fortune listener is last in the middleware stack,
// since it ends the response by default (this can be optionally disabled).
app.use((request, response) =>
listener(request, response)
.catch(error => { ... }))
```

## Customization

The HTML serializer has some customization options.

- `prefix`: a prefix to add to *every* route. Default: `""` (empty string).
- `indexRoute`: path to the index route. Default: `""` (empty string).
- `injectHTML`: passing this option as a String to the HTML serializer will include it in the response.

On record type field definitions:

- `inputOnly`: on a record field definition, setting this property to true will mark it as an input only field. Combined with making the field non-enumerable, virtual inputs can be defined.
- `outputOnly`: on a record field definition, setting this property to true will hide it from input.

The form serializers interpret a few special fields.

- All payloads must include cookie values, prefixed with `CSRF_` to prevent Cross-Site Request Forgery attacks.
- The special field `__method__` may be used to override the method, which may be valued by any method that Fortune.js accepts.

## Demo

By installing the development dependencies, one can run the test instance locally:

```
$ npm i && npm run demo
```

## License

This software is licensed under the [MIT license](https://raw.githubusercontent.com/fortunejs/fortune-http/master/LICENSE).