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