@@ -19,19 +19,14 @@ var debug = require('debug')('body-parser:urlencoded')
19
19
var isFinished = require ( 'on-finished' ) . isFinished
20
20
var read = require ( '../read' )
21
21
var typeis = require ( 'type-is' )
22
+ var qs = require ( 'qs' )
22
23
23
24
/**
24
25
* Module exports.
25
26
*/
26
27
27
28
module . exports = urlencoded
28
29
29
- /**
30
- * Cache of parser modules.
31
- */
32
-
33
- var parsers = Object . create ( null )
34
-
35
30
/**
36
31
* Create a middleware to parse urlencoded bodies.
37
32
*
@@ -56,9 +51,7 @@ function urlencoded (options) {
56
51
}
57
52
58
53
// create the appropriate query parser
59
- var queryparse = extended
60
- ? extendedparser ( opts )
61
- : simpleparser ( opts )
54
+ var queryparse = createQueryParser ( opts , extended )
62
55
63
56
// create the appropriate type checking function
64
57
var shouldParse = typeof type !== 'function'
@@ -126,11 +119,10 @@ function urlencoded (options) {
126
119
* @param {object } options
127
120
*/
128
121
129
- function extendedparser ( options ) {
122
+ function createQueryParser ( options , extended ) {
130
123
var parameterLimit = options . parameterLimit !== undefined
131
124
? options . parameterLimit
132
125
: 1000
133
- var parse = parser ( 'qs' )
134
126
135
127
if ( isNaN ( parameterLimit ) || parameterLimit < 1 ) {
136
128
throw new TypeError ( 'option parameterLimit must be a positive number' )
@@ -140,6 +132,8 @@ function extendedparser (options) {
140
132
parameterLimit = parameterLimit | 0
141
133
}
142
134
135
+ var depth = extended ? Infinity : 0
136
+
143
137
return function queryparse ( body ) {
144
138
var paramCount = parameterCount ( body , parameterLimit )
145
139
@@ -150,13 +144,14 @@ function extendedparser (options) {
150
144
} )
151
145
}
152
146
153
- var arrayLimit = Math . max ( 100 , paramCount )
147
+ var arrayLimit = extended ? Math . max ( 100 , paramCount ) : 0
148
+
149
+ debug ( 'parse ' + ( extended ? 'extended ' : '' ) + 'urlencoding' )
154
150
155
- debug ( 'parse extended urlencoding' )
156
- return parse ( body , {
151
+ return qs . parse ( body , {
157
152
allowPrototypes : true ,
158
153
arrayLimit : arrayLimit ,
159
- depth : Infinity ,
154
+ depth : depth ,
160
155
parameterLimit : parameterLimit
161
156
} )
162
157
}
@@ -201,72 +196,6 @@ function parameterCount (body, limit) {
201
196
return count
202
197
}
203
198
204
- /**
205
- * Get parser for module name dynamically.
206
- *
207
- * @param {string } name
208
- * @return {function }
209
- * @api private
210
- */
211
-
212
- function parser ( name ) {
213
- var mod = parsers [ name ]
214
-
215
- if ( mod !== undefined ) {
216
- return mod . parse
217
- }
218
-
219
- // this uses a switch for static require analysis
220
- switch ( name ) {
221
- case 'qs' :
222
- mod = require ( 'qs' )
223
- break
224
- case 'querystring' :
225
- mod = require ( 'querystring' )
226
- break
227
- }
228
-
229
- // store to prevent invoking require()
230
- parsers [ name ] = mod
231
-
232
- return mod . parse
233
- }
234
-
235
- /**
236
- * Get the simple query parser.
237
- *
238
- * @param {object } options
239
- */
240
-
241
- function simpleparser ( options ) {
242
- var parameterLimit = options . parameterLimit !== undefined
243
- ? options . parameterLimit
244
- : 1000
245
- var parse = parser ( 'querystring' )
246
-
247
- if ( isNaN ( parameterLimit ) || parameterLimit < 1 ) {
248
- throw new TypeError ( 'option parameterLimit must be a positive number' )
249
- }
250
-
251
- if ( isFinite ( parameterLimit ) ) {
252
- parameterLimit = parameterLimit | 0
253
- }
254
-
255
- return function queryparse ( body ) {
256
- var paramCount = parameterCount ( body , parameterLimit )
257
-
258
- if ( paramCount === undefined ) {
259
- debug ( 'too many parameters' )
260
- throw createError ( 413 , 'too many parameters' , {
261
- type : 'parameters.too.many'
262
- } )
263
- }
264
-
265
- debug ( 'parse urlencoding' )
266
- return parse ( body , undefined , undefined , { maxKeys : parameterLimit } )
267
- }
268
- }
269
-
270
199
/**
271
200
* Get the simple type checker.
272
201
*
0 commit comments