@@ -18,6 +18,11 @@ import getConfig from './config'
18
18
// We need to go up one more level since we are in the `dist` directory
19
19
import pkg from '../../package'
20
20
21
+ const internalPrefixes = [
22
+ / ^ \/ _ n e x t \/ / ,
23
+ / ^ \/ s t a t i c \/ /
24
+ ]
25
+
21
26
export default class Server {
22
27
constructor ( { dir = '.' , dev = false , staticMarkup = false , quiet = false } = { } ) {
23
28
this . dir = resolve ( dir )
@@ -42,25 +47,27 @@ export default class Server {
42
47
this . defineRoutes ( )
43
48
}
44
49
45
- getRequestHandler ( ) {
46
- return ( req , res , parsedUrl ) => {
47
- // Parse url if parsedUrl not provided
48
- if ( ! parsedUrl ) {
49
- parsedUrl = parseUrl ( req . url , true )
50
- }
51
-
52
- // Parse the querystring ourselves if the user doesn't handle querystring parsing
53
- if ( typeof parsedUrl . query === 'string' ) {
54
- parsedUrl . query = parseQs ( parsedUrl . query )
55
- }
50
+ handleRequest ( req , res , parsedUrl ) {
51
+ // Parse url if parsedUrl not provided
52
+ if ( ! parsedUrl ) {
53
+ parsedUrl = parseUrl ( req . url , true )
54
+ }
56
55
57
- return this . run ( req , res , parsedUrl )
58
- . catch ( ( err ) => {
59
- if ( ! this . quiet ) console . error ( err )
60
- res . statusCode = 500
61
- res . end ( STATUS_CODES [ 500 ] )
62
- } )
56
+ // Parse the querystring ourselves if the user doesn't handle querystring parsing
57
+ if ( typeof parsedUrl . query === 'string' ) {
58
+ parsedUrl . query = parseQs ( parsedUrl . query )
63
59
}
60
+
61
+ return this . run ( req , res , parsedUrl )
62
+ . catch ( ( err ) => {
63
+ if ( ! this . quiet ) console . error ( err )
64
+ res . statusCode = 500
65
+ res . end ( STATUS_CODES [ 500 ] )
66
+ } )
67
+ }
68
+
69
+ getRequestHandler ( ) {
70
+ return this . handleRequest . bind ( this )
64
71
}
65
72
66
73
async prepare ( ) {
@@ -181,7 +188,11 @@ export default class Server {
181
188
}
182
189
}
183
190
184
- async render ( req , res , pathname , query ) {
191
+ async render ( req , res , pathname , query , parsedUrl ) {
192
+ if ( this . isInternalUrl ( req ) ) {
193
+ return this . handleRequest ( req , res , parsedUrl )
194
+ }
195
+
185
196
if ( this . config . poweredByHeader ) {
186
197
res . setHeader ( 'X-Powered-By' , `Next.js ${ pkg . version } ` )
187
198
}
@@ -291,6 +302,16 @@ export default class Server {
291
302
}
292
303
}
293
304
305
+ isInternalUrl ( req ) {
306
+ for ( const prefix of internalPrefixes ) {
307
+ if ( prefix . test ( req . url ) ) {
308
+ return true
309
+ }
310
+ }
311
+
312
+ return false
313
+ }
314
+
294
315
readBuildId ( ) {
295
316
const buildIdPath = join ( this . dir , this . dist , 'BUILD_ID' )
296
317
const buildId = fs . readFileSync ( buildIdPath , 'utf8' )
0 commit comments