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)
							 | 
						||
| 
								 | 
							
								}
							 |