Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/eomm/fastify-raw-body

Request raw body
https://github.com/eomm/fastify-raw-body

body-parser fastify fastify-plugin hacktoberfest raw strapi

Last synced: 2 days ago
JSON representation

Request raw body

Awesome Lists containing this project

README

        

# fastify-raw-body

[![Build Status](https://github.com/Eomm/fastify-raw-body/workflows/ci/badge.svg)](https://github.com/Eomm/fastify-raw-body/actions)
[![npm](https://img.shields.io/npm/v/fastify-raw-body)](https://www.npmjs.com/package/fastify-raw-body)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

Adds the raw body to the Fastify request object.

## Install

```
npm i fastify-raw-body
```

### Compatibility

| Plugin version | Fastify version |
| ------------- |:---------------:|
| `^5.0.0` | `^5.0.0` |
| `^4.2.1` | `^4.19.0` |
| `^4.0.0` | `^4.0.0` |
| `^3.0.0` | `^3.0.0` |
| `^2.0.0` | `^2.0.0` |

## Usage

This plugin will add the `request.rawBody`.
It will get the data using the [`preParsing`](https://www.fastify.io/docs/latest/Reference/Hooks/#preparsing) hook.

```js
import Fastify from 'fastify'

const app = Fastify()
await app.register(import('fastify-raw-body'), {
field: 'rawBody', // change the default request.rawBody property name
global: false, // add the rawBody to every request. **Default true**
encoding: 'utf8', // set it to false to set rawBody as a Buffer **Default utf8**
runFirst: true, // get the body before any preParsing hook change/uncompress it. **Default false**
routes: [], // array of routes, **`global`** will be ignored, wildcard routes not supported
jsonContentTypes: [], // array of content-types to handle as JSON. **Default ['application/json']**
})

app.post('/', {
config: {
// add the rawBody to this route. if false, rawBody will be disabled when global is true
rawBody: true
},
handler (req, reply) {
// req.rawBody the string raw body
reply.send(req.rawBody)
}
})
```

> **Note**
> You need to `await` the plugin registration to make sure the plugin is ready to use.
> All the routes defined **before** the plugin registration will be ignored.
> This change has been introduced in Fastify v4.

> **Warning**
> Setting `global: false` and then the route configuration `{ config: { rawBody: true } }` will
> save memory of your server since the `rawBody` is a copy of the `body` and it will double the memory usage.
> So use it only for the routes that you need to.

### Raw body as Buffer

It is important to know that setting `encoding: false` will run [`addContentTypeParser`](https://www.fastify.io/docs/master/ContentTypeParser/) to add a content type parser for `application/json`.

This is needed since the default content type parser will set the encoding of the request stream to `{ parseAs: 'string' }`.

If you haven't customized this component, it will be secure as the original one since [`secure-json-parse`](https://www.npmjs.com/package/secure-json-parse) is used under the hood.

## License

Copyright [Manuel Spigolon](https://github.com/Eomm), Licensed under [MIT](./LICENSE).