1
- import { INestApplication , MiddlewareConsumer , Module } from '@nestjs/common' ;
1
+ import {
2
+ Global ,
3
+ INestApplication ,
4
+ MiddlewareConsumer ,
5
+ Module ,
6
+ } from '@nestjs/common' ;
2
7
import { Test } from '@nestjs/testing' ;
3
8
import * as request from 'supertest' ;
4
9
5
10
const RETURN_VALUE_A = 'test_A' ;
6
11
const RETURN_VALUE_B = 'test_B' ;
12
+ const RETURN_VALUE_X = 'test_X' ;
13
+ const RETURN_VALUE_GLOBAL = 'test_GLOBAL' ;
7
14
8
- @Module ( {
9
- imports : [ ] ,
10
- } )
15
+ @Global ( )
16
+ @Module ( { } )
17
+ class GlobalModule {
18
+ configure ( consumer : MiddlewareConsumer ) {
19
+ consumer
20
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_GLOBAL ) )
21
+ . forRoutes ( 'ping' ) ;
22
+ }
23
+ }
24
+
25
+ @Module ( { imports : [ GlobalModule ] } )
26
+ class ModuleX {
27
+ configure ( consumer : MiddlewareConsumer ) {
28
+ consumer
29
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_X ) )
30
+ . forRoutes ( 'hello' )
31
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_X ) )
32
+ . forRoutes ( 'ping' ) ;
33
+ }
34
+ }
35
+
36
+ @Module ( { imports : [ ModuleX ] } )
11
37
class ModuleA {
12
38
configure ( consumer : MiddlewareConsumer ) {
13
39
consumer
14
- . apply ( ( req , res , next ) => {
15
- res . send ( RETURN_VALUE_A ) ;
16
- } )
17
- . forRoutes ( 'hello ' ) ;
40
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_A ) )
41
+ . forRoutes ( 'hello' )
42
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_A ) )
43
+ . forRoutes ( 'ping ' ) ;
18
44
}
19
45
}
20
46
@@ -24,10 +50,10 @@ class ModuleA {
24
50
class ModuleB {
25
51
configure ( consumer : MiddlewareConsumer ) {
26
52
consumer
27
- . apply ( ( req , res , next ) => {
28
- res . send ( RETURN_VALUE_B ) ;
29
- } )
30
- . forRoutes ( 'hello ' ) ;
53
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_B ) )
54
+ . forRoutes ( 'hello' )
55
+ . apply ( ( req , res , next ) => res . send ( RETURN_VALUE_B ) )
56
+ . forRoutes ( 'ping ' ) ;
31
57
}
32
58
}
33
59
@@ -55,6 +81,12 @@ describe('Middleware (execution order)', () => {
55
81
. expect ( 200 , RETURN_VALUE_B ) ;
56
82
} ) ;
57
83
84
+ it ( 'should execute global middleware first' , ( ) => {
85
+ return request ( app . getHttpServer ( ) )
86
+ . get ( '/ping' )
87
+ . expect ( 200 , RETURN_VALUE_GLOBAL ) ;
88
+ } ) ;
89
+
58
90
afterEach ( async ( ) => {
59
91
await app . close ( ) ;
60
92
} ) ;
0 commit comments