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
			| 
											3 years ago
										 | /*! | ||
|  |  * 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) | ||
|  | } |