You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					87 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					87 lines
				
				2.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# @fastify/formbody
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](https://www.npmjs.com/package/@fastify/formbody)
							 | 
						||
| 
								 | 
							
								[](https://www.npmjs.com/package/@fastify/formbody)
							 | 
						||
| 
								 | 
							
								[](https://standardjs.com)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A simple plugin for [Fastify][fastify] that adds a content type parser for
							 | 
						||
| 
								 | 
							
								the content type `application/x-www-form-urlencoded`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[fastify]: https://www.fastify.io/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This branch targets Fastify v4. Please refer to [this branch](https://github.com/fastify/fastify-formbody/tree/3.x) and related versions for Fastify `^2.0.0` compatibility.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For Fastify v3 support, please use @fastify/formbody `^6.0.1`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Given the following code:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								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:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```html
							 | 
						||
| 
								 | 
							
								foo=foo&bar=bar&answer=42
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The sent reply would be the object:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  foo: 'foo',
							 | 
						||
| 
								 | 
							
								  bar: 'bar',
							 | 
						||
| 
								 | 
							
								  answer: 42
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The plugin accepts an options object with the following properties:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ `bodyLimit`: The maximum amount of bytes to process
							 | 
						||
| 
								 | 
							
								before returning an error. If the limit is exceeded, a `500` error will be
							 | 
						||
| 
								 | 
							
								returned immediately. When set to `undefined` the limit will be set to whatever
							 | 
						||
| 
								 | 
							
								is configured on the parent Fastify instance. The default value is
							 | 
						||
| 
								 | 
							
								whatever is configured in
							 | 
						||
| 
								 | 
							
								[fastify](https://github.com/fastify/fastify/blob/main/docs/Reference/Server.md#bodylimit)
							 | 
						||
| 
								 | 
							
								 (`1048576` 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) })`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Upgrading from 4.x
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Previously, the external [qs lib](https://github.com/ljharb/qs) was used that did things like parse nested objects. For example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- ***Input:*** `foo[one]=foo&foo[two]=bar`
							 | 
						||
| 
								 | 
							
								- ***Parsed:*** `{ foo: { one: 'foo', two: 'bar' } }`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The way this is handled now using the built-in querystring.parse:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- ***Input:*** `foo[one]=foo&foo[two]=bar`
							 | 
						||
| 
								 | 
							
								- ***Parsed:*** `{ '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:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const fastify = require('fastify')()
							 | 
						||
| 
								 | 
							
								const qs = require('qs')
							 | 
						||
| 
								 | 
							
								fastify.register(require('@fastify/formbody'), { parser: str => qs.parse(str) })
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Licensed under [MIT](./LICENSE)
							 |