@@ -32,10 +32,28 @@ var app = exports = module.exports = {};
32
32
*/
33
33
34
34
app . init = function ( ) {
35
+ var router = null ;
36
+
35
37
this . cache = { } ;
36
38
this . settings = { } ;
37
39
this . engines = { } ;
38
40
this . defaultConfiguration ( ) ;
41
+
42
+ // Setup getting to lazily add base router
43
+ Object . defineProperty ( this , 'router' , {
44
+ configurable : true ,
45
+ enumerable : true ,
46
+ get : function getrouter ( ) {
47
+ if ( router === null ) {
48
+ router = new Router ( {
49
+ caseSensitive : this . enabled ( 'case sensitive routing' ) ,
50
+ strict : this . enabled ( 'strict routing' )
51
+ } ) ;
52
+ }
53
+
54
+ return router ;
55
+ }
56
+ } ) ;
39
57
} ;
40
58
41
59
/**
@@ -83,23 +101,6 @@ app.defaultConfiguration = function(){
83
101
}
84
102
} ;
85
103
86
- /**
87
- * lazily adds the base router if it has not yet been added.
88
- *
89
- * We cannot add the base router in the defaultConfiguration because
90
- * it reads app settings which might be set after that has run.
91
- *
92
- * @api private
93
- */
94
- app . lazyrouter = function ( ) {
95
- if ( ! this . _router ) {
96
- this . _router = new Router ( {
97
- caseSensitive : this . enabled ( 'case sensitive routing' ) ,
98
- strict : this . enabled ( 'strict routing' )
99
- } ) ;
100
- }
101
- } ;
102
-
103
104
/**
104
105
* Dispatch a req, res pair into the application. Starts pipeline processing.
105
106
*
@@ -110,21 +111,12 @@ app.lazyrouter = function() {
110
111
*/
111
112
112
113
app . handle = function ( req , res , done ) {
113
- var router = this . _router ;
114
-
115
114
// final handler
116
115
done = done || finalhandler ( req , res , {
117
116
env : this . get ( 'env' ) ,
118
117
onerror : logerror . bind ( this )
119
118
} ) ;
120
119
121
- // no routes
122
- if ( ! router ) {
123
- debug ( 'no routes defined on app' ) ;
124
- done ( ) ;
125
- return ;
126
- }
127
-
128
120
// set powered by header
129
121
if ( this . enabled ( 'x-powered-by' ) ) {
130
122
res . setHeader ( 'X-Powered-By' , 'Express' ) ;
@@ -143,7 +135,7 @@ app.handle = function(req, res, done) {
143
135
res . locals = Object . create ( null ) ;
144
136
}
145
137
146
- router . handle ( req , res , done ) ;
138
+ this . router . handle ( req , res , done ) ;
147
139
} ;
148
140
149
141
/**
@@ -170,9 +162,8 @@ app.use = function use(path, fn) {
170
162
: fn ;
171
163
}
172
164
173
- // setup router
174
- this . lazyrouter ( ) ;
175
- var router = this . _router ;
165
+ // get router
166
+ var router = this . router ;
176
167
177
168
// express app
178
169
if ( mount_app && mount_app . handle && mount_app . set ) {
@@ -212,9 +203,8 @@ app.use = function use(path, fn) {
212
203
* @api public
213
204
*/
214
205
215
- app . route = function ( path ) {
216
- this . lazyrouter ( ) ;
217
- return this . _router . route ( path ) ;
206
+ app . route = function route ( path ) {
207
+ return this . router . route ( path ) ;
218
208
} ;
219
209
220
210
/**
@@ -270,18 +260,15 @@ app.engine = function(ext, fn){
270
260
* @api public
271
261
*/
272
262
273
- app . param = function ( name , fn ) {
274
- var self = this ;
275
- self . lazyrouter ( ) ;
276
-
263
+ app . param = function param ( name , fn ) {
277
264
if ( Array . isArray ( name ) ) {
278
- name . forEach ( function ( key ) {
279
- self . param ( key , fn ) ;
280
- } ) ;
265
+ for ( var i = 0 ; i < name . length ; i ++ ) {
266
+ this . param ( name [ i ] , fn ) ;
267
+ }
281
268
return this ;
282
269
}
283
270
284
- self . _router . param ( name , fn ) ;
271
+ this . router . param ( name , fn ) ;
285
272
return this ;
286
273
} ;
287
274
@@ -418,9 +405,7 @@ methods.forEach(function(method){
418
405
app [ method ] = function ( path ) {
419
406
if ( 'get' == method && 1 == arguments . length ) return this . set ( path ) ;
420
407
421
- this . lazyrouter ( ) ;
422
-
423
- var route = this . _router . route ( path ) ;
408
+ var route = this . route ( path ) ;
424
409
route [ method ] . apply ( route , [ ] . slice . call ( arguments , 1 ) ) ;
425
410
return this ;
426
411
} ;
@@ -437,9 +422,7 @@ methods.forEach(function(method){
437
422
*/
438
423
439
424
app . all = function ( path ) {
440
- this . lazyrouter ( ) ;
441
-
442
- var route = this . _router . route ( path ) ;
425
+ var route = this . route ( path ) ;
443
426
var args = [ ] . slice . call ( arguments , 1 ) ;
444
427
methods . forEach ( function ( method ) {
445
428
route [ method ] . apply ( route , args ) ;
0 commit comments