Skip to content
Snippets Groups Projects
Select Git revision
  • 9cb9b17af5950ac779d34b3f40a0d21271dc8ca5
  • main default protected
2 results

index.js

Blame
  • index.js 2.62 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) {
      // 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)
    }