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.
		
		
		
		
		
			
		
			
				
					
					
						
							33 lines
						
					
					
						
							716 B
						
					
					
				
			
		
		
	
	
							33 lines
						
					
					
						
							716 B
						
					
					
				| 'use strict'
 | |
| 
 | |
| const fp = require('fastify-plugin')
 | |
| const { parse } = require('querystring')
 | |
| 
 | |
| function defaultParser (str) {
 | |
|   return parse(str)
 | |
| }
 | |
| 
 | |
| function formBodyPlugin (fastify, options, next) {
 | |
|   const opts = Object.assign({ parser: defaultParser }, options)
 | |
|   if (typeof opts.parser !== 'function') {
 | |
|     next(new Error('parser must be a function'))
 | |
|     return
 | |
|   }
 | |
| 
 | |
|   function contentParser (req, body, done) {
 | |
|     done(null, opts.parser(body.toString()))
 | |
|   }
 | |
| 
 | |
|   fastify.addContentTypeParser(
 | |
|     'application/x-www-form-urlencoded',
 | |
|     { parseAs: 'buffer', bodyLimit: opts.bodyLimit },
 | |
|     contentParser
 | |
|   )
 | |
|   next()
 | |
| }
 | |
| 
 | |
| module.exports = fp(formBodyPlugin, {
 | |
|   fastify: '^3.0.0',
 | |
|   name: 'fastify-formbody'
 | |
| })
 |