@@ -40,6 +40,7 @@ import type {
40
40
RoutingConfig ,
41
41
} from "./interfaces" ;
42
42
import type { OutgoingHttpHeaders } from "node:http" ;
43
+ import { getRenderMetadata } from "./decorators" ;
43
44
44
45
export class InversifyExpressServer {
45
46
private _router : Router ;
@@ -245,21 +246,26 @@ export class InversifyExpressServer {
245
246
controllerName : string ,
246
247
key : string ,
247
248
parameterMetadata : Array < ParameterMetadata > ,
248
- ) : express . RequestHandler {
249
+ ) : RequestHandler {
249
250
return async ( req : Request , res : Response , next : NextFunction ) : Promise < void > => {
250
251
try {
251
252
const args = this . extractParameters ( req , res , next , parameterMetadata ) ;
252
253
const httpContext = this . _getHttpContext ( req ) ;
253
254
httpContext . container . bind < HttpContext > ( TYPE . HttpContext ) . toConstantValue ( httpContext ) ;
254
255
255
256
// invoke controller's action
256
- const value = await (
257
- httpContext . container . getNamed < BaseController > ( TYPE . Controller , controllerName ) [
258
- key
259
- ] as ControllerHandler
260
- ) ( ...args ) ;
261
-
262
- if ( value instanceof HttpResponseMessage ) {
257
+ const controller = httpContext . container . getNamed < BaseController > (
258
+ TYPE . Controller ,
259
+ controllerName ,
260
+ ) ;
261
+ const value = await ( controller [ key ] as ControllerHandler ) ( ...args ) ;
262
+
263
+ const { template, defaultData } = getRenderMetadata ( controller , key ) ;
264
+
265
+ if ( template ) {
266
+ const data = value || defaultData || { } ;
267
+ res . render ( template , data as Record < string , unknown > ) ;
268
+ } else if ( value instanceof HttpResponseMessage ) {
263
269
await this . handleHttpResponseMessage ( value , res ) ;
264
270
} else if ( instanceOfIHttpActionResult ( value ) ) {
265
271
const httpResponseMessage = await value . executeAsync ( ) ;
0 commit comments