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) { | 
						|
  var opts = {} | 
						|
 | 
						|
  // exclude type option | 
						|
  if (options) { | 
						|
    for (var prop in options) { | 
						|
      if (prop !== 'type') { | 
						|
        opts[prop] = options[prop] | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  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) | 
						|
}
 | 
						|
 |