@@ -39,6 +39,7 @@ function matchOneLine(line, req){
39
39
method : fields [ 0 ] ,
40
40
querys : parseQueryStr ( fields . find ( fld => fld [ 0 ] === '?' ) ) ,
41
41
pathParams : parseQueryStr ( fields . find ( fld => fld [ 0 ] === '_' ) ) ,
42
+ bodyArgs : parseQueryStr ( fields . find ( fld => fld [ 0 ] === '+' ) ) ,
42
43
responsePath : fields [ fields . length - 1 ] ,
43
44
} ;
44
45
@@ -86,6 +87,26 @@ function matchOneLine(line, req){
86
87
if ( ! pathParamsOk )
87
88
return false ;
88
89
90
+ let bodyArgsOk = false ;
91
+ if ( _ . isObject ( cfg . bodyArgs ) ) {
92
+ bodyArgsOk = true ;
93
+ const keys = Object . keys ( cfg . bodyArgs ) ;
94
+ for ( let i = 0 ; i < keys . length ; i ++ ) {
95
+ const key = keys [ i ] ;
96
+ const rule = cfg . bodyArgs [ key ] ;
97
+ if ( ! isRuleMatch ( rule , req . body [ key ] ) ) {
98
+ bodyArgsOk = false ;
99
+ break ;
100
+ }
101
+ }
102
+ } else if ( cfg . bodyArgs === false ) {
103
+ bodyArgsOk = true ;
104
+ } else {
105
+ return new Error ( 'Abnormal condition.' ) ;
106
+ }
107
+ if ( ! bodyArgsOk )
108
+ return false ;
109
+
89
110
return cfg . responsePath ;
90
111
}
91
112
@@ -102,15 +123,19 @@ function walkMapFileLines(mapFilePath, req) {
102
123
const tmp = matchOneLine ( line , req ) ;
103
124
if ( tmp ) {
104
125
responsePath = tmp ;
105
- lineReader . close ( ) ;
106
126
resolve ( responsePath ) ;
127
+ lineReader . close ( ) ;
107
128
}
108
129
}
109
130
catch ( err ) {
110
131
err . message = `Bad rule for matching: ${ line } . ${ err . message } ` ;
111
132
reject ( err . message ) ;
112
133
}
113
134
} ) ;
135
+ lineReader . on ( 'close' , ( ) => {
136
+ // handle only EOF situation
137
+ reject ( 'No match.' ) ;
138
+ } ) ;
114
139
} ) ;
115
140
}
116
141
@@ -124,7 +149,10 @@ function match(req) {
124
149
if ( fs . existsSync ( mapFilePath ) ) {
125
150
walkMapFileLines ( mapFilePath , req ) . then (
126
151
responsePath => resolve ( pathUtil . resolve ( resource . path , responsePath ) ) ,
127
- reason => reject ( reason ) ,
152
+ reason => {
153
+ console . error ( reason ) ;
154
+ resolve ( null ) ;
155
+ } ,
128
156
) ;
129
157
} else if ( fs . existsSync ( defaultResponsePath ) ) {
130
158
resolve ( defaultResponsePath ) ;
0 commit comments