twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

index.js (2656B)


      1 /*!
      2  * body-parser
      3  * Copyright(c) 2014-2015 Douglas Christopher Wilson
      4  * MIT Licensed
      5  */
      6 
      7 'use strict'
      8 
      9 /**
     10  * Module dependencies.
     11  * @private
     12  */
     13 
     14 var deprecate = require('depd')('body-parser')
     15 
     16 /**
     17  * Cache of loaded parsers.
     18  * @private
     19  */
     20 
     21 var parsers = Object.create(null)
     22 
     23 /**
     24  * @typedef Parsers
     25  * @type {function}
     26  * @property {function} json
     27  * @property {function} raw
     28  * @property {function} text
     29  * @property {function} urlencoded
     30  */
     31 
     32 /**
     33  * Module exports.
     34  * @type {Parsers}
     35  */
     36 
     37 exports = module.exports = deprecate.function(bodyParser,
     38   'bodyParser: use individual json/urlencoded middlewares')
     39 
     40 /**
     41  * JSON parser.
     42  * @public
     43  */
     44 
     45 Object.defineProperty(exports, 'json', {
     46   configurable: true,
     47   enumerable: true,
     48   get: createParserGetter('json')
     49 })
     50 
     51 /**
     52  * Raw parser.
     53  * @public
     54  */
     55 
     56 Object.defineProperty(exports, 'raw', {
     57   configurable: true,
     58   enumerable: true,
     59   get: createParserGetter('raw')
     60 })
     61 
     62 /**
     63  * Text parser.
     64  * @public
     65  */
     66 
     67 Object.defineProperty(exports, 'text', {
     68   configurable: true,
     69   enumerable: true,
     70   get: createParserGetter('text')
     71 })
     72 
     73 /**
     74  * URL-encoded parser.
     75  * @public
     76  */
     77 
     78 Object.defineProperty(exports, 'urlencoded', {
     79   configurable: true,
     80   enumerable: true,
     81   get: createParserGetter('urlencoded')
     82 })
     83 
     84 /**
     85  * Create a middleware to parse json and urlencoded bodies.
     86  *
     87  * @param {object} [options]
     88  * @return {function}
     89  * @deprecated
     90  * @public
     91  */
     92 
     93 function bodyParser (options) {
     94   var opts = {}
     95 
     96   // exclude type option
     97   if (options) {
     98     for (var prop in options) {
     99       if (prop !== 'type') {
    100         opts[prop] = options[prop]
    101       }
    102     }
    103   }
    104 
    105   var _urlencoded = exports.urlencoded(opts)
    106   var _json = exports.json(opts)
    107 
    108   return function bodyParser (req, res, next) {
    109     _json(req, res, function (err) {
    110       if (err) return next(err)
    111       _urlencoded(req, res, next)
    112     })
    113   }
    114 }
    115 
    116 /**
    117  * Create a getter for loading a parser.
    118  * @private
    119  */
    120 
    121 function createParserGetter (name) {
    122   return function get () {
    123     return loadParser(name)
    124   }
    125 }
    126 
    127 /**
    128  * Load a parser module.
    129  * @private
    130  */
    131 
    132 function loadParser (parserName) {
    133   var parser = parsers[parserName]
    134 
    135   if (parser !== undefined) {
    136     return parser
    137   }
    138 
    139   // this uses a switch for static require analysis
    140   switch (parserName) {
    141     case 'json':
    142       parser = require('./lib/types/json')
    143       break
    144     case 'raw':
    145       parser = require('./lib/types/raw')
    146       break
    147     case 'text':
    148       parser = require('./lib/types/text')
    149       break
    150     case 'urlencoded':
    151       parser = require('./lib/types/urlencoded')
    152       break
    153   }
    154 
    155   // store to prevent invoking require()
    156   return (parsers[parserName] = parser)
    157 }