Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50640 views
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
}
158
159