9
9
import type { ɵgetOrCreateAngularServerApp as getOrCreateAngularServerApp } from '@angular/ssr' ;
10
10
import type { ServerResponse } from 'node:http' ;
11
11
import type { Connect , ViteDevServer } from 'vite' ;
12
+ import { loadEsmModule } from '../../../utils/load-esm' ;
12
13
13
14
export function createAngularSSRMiddleware (
14
15
server : ViteDevServer ,
@@ -30,6 +31,9 @@ export function createAngularSSRMiddleware(
30
31
const url = new URL ( req . url , baseUrl ) ;
31
32
32
33
( async ( ) => {
34
+ const { writeResponseToNodeResponse, createWebRequestFromNodeRequest } =
35
+ await loadEsmModule < typeof import ( '@angular/ssr/node' ) > ( '@angular/ssr/node' ) ;
36
+
33
37
const { ɵgetOrCreateAngularServerApp } = ( await server . ssrLoadModule ( '/main.server.mjs' ) ) as {
34
38
ɵgetOrCreateAngularServerApp : typeof getOrCreateAngularServerApp ;
35
39
} ;
@@ -46,20 +50,15 @@ export function createAngularSSRMiddleware(
46
50
cachedAngularServerApp = angularServerApp ;
47
51
}
48
52
49
- const response = await angularServerApp . render (
50
- new Request ( url , { signal : AbortSignal . timeout ( 30_000 ) } ) ,
51
- undefined ,
52
- ) ;
53
-
54
- return response ?. text ( ) ;
55
- } ) ( )
56
- . then ( ( content ) => {
57
- if ( typeof content !== 'string' ) {
58
- return next ( ) ;
59
- }
53
+ const webReq = new Request ( createWebRequestFromNodeRequest ( req ) , {
54
+ signal : AbortSignal . timeout ( 30_000 ) ,
55
+ } ) ;
56
+ const webRes = await angularServerApp . render ( webReq ) ;
57
+ if ( ! webRes ) {
58
+ return next ( ) ;
59
+ }
60
60
61
- res . end ( content ) ;
62
- } )
63
- . catch ( ( error ) => next ( error ) ) ;
61
+ return writeResponseToNodeResponse ( webRes , res ) ;
62
+ } ) ( ) . catch ( next ) ;
64
63
} ;
65
64
}
0 commit comments