123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*!
- * 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)
- }
|