@@ -186,7 +186,7 @@ class SocketServer {
186186 * @returns {[function] } Returns a list of middleware functions
187187 */
188188 afterMiddlewares ( ) {
189- return [ ] ;
189+ return [ this . removeWrapNext . bind ( this ) ] ;
190190 }
191191
192192 /**
@@ -196,7 +196,16 @@ class SocketServer {
196196 middlewares ( ) {
197197 function wrapMiddleware ( middleware ) {
198198 return ( socket , next ) => {
199- return middleware ( socket . request , socket . request . res , next ) ;
199+ let nextCalled = false ;
200+ const wrapNext = ( err ) => {
201+ delete socket . request . _next ;
202+ if ( ! nextCalled ) {
203+ nextCalled = true ;
204+ next ( err ) ;
205+ }
206+ } ;
207+ socket . request . _next = wrapNext ;
208+ return middleware ( socket . request , socket . request . res , wrapNext ) ;
200209 } ;
201210 }
202211
@@ -213,14 +222,26 @@ class SocketServer {
213222 return middlewares . concat ( this . afterMiddlewares ( ) ) ;
214223 }
215224
225+ removeWrapNext ( socket , next ) {
226+ const req = socket . request ;
227+ let error ;
228+ try {
229+ delete req . _next ;
230+ } catch ( err ) {
231+ error = err ;
232+ } finally {
233+ next ( error ) ;
234+ }
235+ }
236+
216237 /**
217238 * Mock the HTTP response object and make available at req.res
218239 * @param {Object } socket Server socket
219240 * @param {function } next Call next
220241 */
221242 mockResponse ( socket , next ) {
222243 const req = socket . request ;
223- let error = null ;
244+ let error ;
224245 try {
225246 // Mock response (not available in websocket, CDS middlewares need it)
226247 const res = req . res ?? { } ;
@@ -245,13 +266,17 @@ class SocketServer {
245266 return res ;
246267 } ;
247268 res . json ??= ( json ) => {
248- this . respond ( socket , res . statusCode , JSON . stringify ( json ) ) ;
249- res . body = json ;
269+ res . send ( JSON . stringify ( json ) ) ;
270+ return res ;
271+ } ;
272+ res . sendStatus ??= ( statusCode ) => {
273+ res . status ( statusCode ) ;
274+ res . send ( res . body || "" + statusCode ) ;
250275 return res ;
251276 } ;
252277 res . send ??= ( text ) => {
253- this . respond ( socket , res . statusCode , text ) ;
254278 res . body = text ;
279+ this . respond ( socket , res . statusCode , text ) ;
255280 return res ;
256281 } ;
257282 res . end ??= ( ) => {
@@ -275,7 +300,7 @@ class SocketServer {
275300 */
276301 applyAuthCookie ( socket , next ) {
277302 const req = socket . request ;
278- let error = null ;
303+ let error ;
279304 try {
280305 // Apply cookie to authorization header
281306 if ( [ "mocked" ] . includes ( cds . env . requires ?. auth ?. kind ) && ! req . headers . authorization && req . headers . cookie ) {
0 commit comments