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.9 KiB
			
		
		
			
		
	
	
					87 lines
				
				2.9 KiB
			| 
											3 years ago
										 | # fastify-formbody
 | ||
|  | 
 | ||
|  |  | ||
|  | [](https://www.npmjs.com/package/fastify-formbody) | ||
|  | [](https://www.npmjs.com/package/fastify-formbody) | ||
|  | [](https://standardjs.com) | ||
|  | [](https://codecov.io/gh/fastify/fastify-formbody) | ||
|  | [](https://snyk.io/test/github/fastify/fastify-formbody) | ||
|  | 
 | ||
|  | 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 v3. Please refer to [this branch](https://github.com/fastify/fastify-formbody/tree/3.x) and related versions for Fastify `^2.0.0` compatibility. | ||
|  | 
 | ||
|  | ## 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(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/master/docs/Factory.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) |