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.
		
		
		
		
		
			
		
			
				
					
					
						
							157 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							157 lines
						
					
					
						
							2.6 KiB
						
					
					
				| /*!
 | |
|  * body-parser
 | |
|  * Copyright(c) 2014-2015 Douglas Christopher Wilson
 | |
|  * MIT Licensed
 | |
|  */
 | |
| 
 | |
| 'use strict'
 | |
| 
 | |
| /**
 | |
|  * Module dependencies.
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| var deprecate = require('depd')('body-parser')
 | |
| 
 | |
| /**
 | |
|  * Cache of loaded parsers.
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| var parsers = Object.create(null)
 | |
| 
 | |
| /**
 | |
|  * @typedef Parsers
 | |
|  * @type {function}
 | |
|  * @property {function} json
 | |
|  * @property {function} raw
 | |
|  * @property {function} text
 | |
|  * @property {function} urlencoded
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Module exports.
 | |
|  * @type {Parsers}
 | |
|  */
 | |
| 
 | |
| exports = module.exports = deprecate.function(bodyParser,
 | |
|   'bodyParser: use individual json/urlencoded middlewares')
 | |
| 
 | |
| /**
 | |
|  * JSON parser.
 | |
|  * @public
 | |
|  */
 | |
| 
 | |
| Object.defineProperty(exports, 'json', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: createParserGetter('json')
 | |
| })
 | |
| 
 | |
| /**
 | |
|  * Raw parser.
 | |
|  * @public
 | |
|  */
 | |
| 
 | |
| Object.defineProperty(exports, 'raw', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: createParserGetter('raw')
 | |
| })
 | |
| 
 | |
| /**
 | |
|  * Text parser.
 | |
|  * @public
 | |
|  */
 | |
| 
 | |
| Object.defineProperty(exports, 'text', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: createParserGetter('text')
 | |
| })
 | |
| 
 | |
| /**
 | |
|  * URL-encoded parser.
 | |
|  * @public
 | |
|  */
 | |
| 
 | |
| Object.defineProperty(exports, 'urlencoded', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: createParserGetter('urlencoded')
 | |
| })
 | |
| 
 | |
| /**
 | |
|  * Create a middleware to parse json and urlencoded bodies.
 | |
|  *
 | |
|  * @param {object} [options]
 | |
|  * @return {function}
 | |
|  * @deprecated
 | |
|  * @public
 | |
|  */
 | |
| 
 | |
| function bodyParser (options) {
 | |
|   // use default type for parsers
 | |
|   var opts = Object.create(options || null, {
 | |
|     type: {
 | |
|       configurable: true,
 | |
|       enumerable: true,
 | |
|       value: undefined,
 | |
|       writable: true
 | |
|     }
 | |
|   })
 | |
| 
 | |
|   var _urlencoded = exports.urlencoded(opts)
 | |
|   var _json = exports.json(opts)
 | |
| 
 | |
|   return function bodyParser (req, res, next) {
 | |
|     _json(req, res, function (err) {
 | |
|       if (err) return next(err)
 | |
|       _urlencoded(req, res, next)
 | |
|     })
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Create a getter for loading a parser.
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| function createParserGetter (name) {
 | |
|   return function get () {
 | |
|     return loadParser(name)
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Load a parser module.
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| function loadParser (parserName) {
 | |
|   var parser = parsers[parserName]
 | |
| 
 | |
|   if (parser !== undefined) {
 | |
|     return parser
 | |
|   }
 | |
| 
 | |
|   // this uses a switch for static require analysis
 | |
|   switch (parserName) {
 | |
|     case 'json':
 | |
|       parser = require('./lib/types/json')
 | |
|       break
 | |
|     case 'raw':
 | |
|       parser = require('./lib/types/raw')
 | |
|       break
 | |
|     case 'text':
 | |
|       parser = require('./lib/types/text')
 | |
|       break
 | |
|     case 'urlencoded':
 | |
|       parser = require('./lib/types/urlencoded')
 | |
|       break
 | |
|   }
 | |
| 
 | |
|   // store to prevent invoking require()
 | |
|   return (parsers[parserName] = parser)
 | |
| }
 |