Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 7 days ago
JSON representation
Request raw body
- Host: GitHub
- URL: https://github.com/eomm/fastify-raw-body
- Owner: Eomm
- License: mit
- Created: 2020-06-14T13:46:07.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-11-18T18:22:55.000Z (2 months ago)
- Last Synced: 2025-01-18T00:07:06.368Z (14 days ago)
- Topics: body-parser, fastify, fastify-plugin, hacktoberfest, raw, strapi
- Language: JavaScript
- Homepage:
- Size: 64.5 KB
- Stars: 46
- Watchers: 3
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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).