@@ -14,8 +14,12 @@ import { RuntimeException } from '../errors/exceptions/runtime.exception';
1414import { createContextId } from '../helpers/context-id-factory' ;
1515import { ExecutionContextHost } from '../helpers/execution-context-host' ;
1616import { NestContainer } from '../injector/container' ;
17- import { InstanceWrapper } from '../injector/instance-wrapper' ;
17+ import { ContextId , InstanceWrapper } from '../injector/instance-wrapper' ;
1818import { Module } from '../injector/module' ;
19+ import {
20+ REQUEST ,
21+ REQUEST_CONTEXT_ID ,
22+ } from '../router/request/request-constants' ;
1923import { RouterExceptionFilters } from '../router/router-exception-filters' ;
2024import { RouterProxy } from '../router/router-proxy' ;
2125import { STATIC_CONTEXT } from './../injector/constants' ;
@@ -124,17 +128,18 @@ export class MiddlewareModule {
124128 applicationRef : any ,
125129 ) {
126130 const { forRoutes } = config ;
127- await Promise . all (
128- forRoutes . map ( async ( routeInfo : Type < any > | string | RouteInfo ) => {
129- await this . registerRouteMiddleware (
130- middlewareContainer ,
131- routeInfo as RouteInfo ,
132- config ,
133- module ,
134- applicationRef ,
135- ) ;
136- } ) ,
137- ) ;
131+ const registerRouteMiddleware = async (
132+ routeInfo : Type < any > | string | RouteInfo ,
133+ ) => {
134+ await this . registerRouteMiddleware (
135+ middlewareContainer ,
136+ routeInfo as RouteInfo ,
137+ config ,
138+ module ,
139+ applicationRef ,
140+ ) ;
141+ } ;
142+ await Promise . all ( forRoutes . map ( registerRouteMiddleware ) ) ;
138143 }
139144
140145 public async registerRouteMiddleware (
@@ -195,7 +200,16 @@ export class MiddlewareModule {
195200 next : ( ) => void ,
196201 ) => {
197202 try {
198- const contextId = createContextId ( ) ;
203+ const contextId = req [ REQUEST_CONTEXT_ID ] || createContextId ( ) ;
204+ if ( ! req [ REQUEST_CONTEXT_ID ] ) {
205+ Object . defineProperty ( req , REQUEST_CONTEXT_ID , {
206+ value : contextId ,
207+ enumerable : false ,
208+ writable : false ,
209+ configurable : false ,
210+ } ) ;
211+ this . registerRequestProvider ( req , contextId ) ;
212+ }
199213 const contextInstance = await this . injector . loadPerContext (
200214 instance ,
201215 module ,
@@ -256,4 +270,14 @@ export class MiddlewareModule {
256270 }
257271 router ( basePath + path , proxy ) ;
258272 }
273+
274+ private registerRequestProvider < T = any > ( request : T , contextId : ContextId ) {
275+ const coreModuleRef = this . container . getInternalCoreModuleRef ( ) ;
276+ const wrapper = coreModuleRef . getProviderByKey ( REQUEST ) ;
277+
278+ wrapper . setInstanceByContextId ( contextId , {
279+ instance : request ,
280+ isResolved : true ,
281+ } ) ;
282+ }
259283}
0 commit comments