A Fastify plugin to parse x-www-form-urlencoded bodies
MIT License
A simple plugin for Fastify that adds a content type parser for
the content type application/x-www-form-urlencoded
.
This branch targets Fastify v4. Please refer to this branch and related versions for Fastify ^2.0.0
compatibility.
For Fastify v3 support, please use @fastify/formbody ^6.0.1
.
npm i @fastify/formbody
Given the following code:
const fastify = require('fastify')()
fastify.register(require('@fastify/formbody'))
fastify.post('/', (req, reply) => {
reply.send(req.body)
})
fastify.listen({ port: 8000 }, (err) => {
if (err) throw err
})
And a POST
body of:
foo=foo&bar=bar&answer=42
The sent reply would be the object:
{
foo: 'foo',
bar: 'bar',
answer: 42
}
The plugin accepts an options object with the following properties:
bodyLimit
: The maximum amount of bytes to process500
error will beundefined
the limit will be set to whatever1048576
by default).parser
: The default parser used is the querystring.parse built-in. You can change this default by passing a parser function e.g. fastify.register(require('@fastify/formbody'), { parser: str => myParser(str) })
Previously, the external qs lib was used that did things like parse nested objects. For example:
foo[one]=foo&foo[two]=bar
{ foo: { one: 'foo', two: 'bar' } }
The way this is handled now using the built-in querystring.parse:
foo[one]=foo&foo[two]=bar
{ 'foo[one]': 'foo', 'foo[two]': 'bar' }
If you need nested parsing, you must configure it manually by installing the qs lib (npm i qs
), and then configure an optional parser:
const fastify = require('fastify')()
const qs = require('qs')
fastify.register(require('@fastify/formbody'), { parser: str => qs.parse(str) })
Licensed under MIT