@@ -25,74 +25,78 @@ export async function start(port: number, hostname: string) {
25
25
26
26
const generateApp = ( await import ( join ( cwd ( ) , 'dist/server/index.js' ) ) ) . generateApp
27
27
28
- const [ appHtml , preloadLinks , state , head , teleports , redirect ] = await generateApp ( url , manifest , req , res )
28
+ try {
29
+ const [ appHtml , preloadLinks , state , head , teleports , redirect ] = await generateApp ( url , manifest , req , res )
29
30
30
- if ( redirect !== null ) {
31
- res . redirect ( redirect )
32
- return
33
- }
34
-
35
- const $ = load ( template )
36
-
37
- const resolvedTags = await head . resolveTags ( ) as HeadTag [ ]
38
-
39
- let tags = [ 'title' , 'meta' , 'link' , 'base' , 'style' , 'script' , 'noscript' ]
40
-
41
- if ( $ ( 'title' ) . length === 1 ) {
42
- tags = tags . filter ( t => t !== 'title' )
43
- const title = resolvedTags . find ( t => t . tag === 'title' )
44
-
45
- if ( title !== undefined ) {
46
- // @ts -ignore
47
- $ ( 'title' ) . text ( title . textContent )
31
+ if ( redirect !== null ) {
32
+ res . redirect ( redirect )
33
+ return
48
34
}
49
- }
50
-
51
- tags . map ( tag => {
52
- resolvedTags . filter ( t => t . tag === tag )
53
- . map ( t => {
54
- let props = ''
55
-
56
- for ( const [ key , value ] of Object . entries ( t . props ) ) {
57
- props = `${ props } ${ key } ="${ value } "`
58
- }
59
-
60
- if ( t . innerHTML !== undefined ) {
61
- $ ( 'head' ) . append ( `<${ tag } ${ props } >${ t . innerHTML } </${ tag } >` )
62
- } else {
63
- $ ( 'head' ) . append ( `<${ tag } ${ props } >` )
64
- }
65
- } )
66
- } )
67
-
68
- const bodyAttrs = resolvedTags . find ( t => t . tag === 'bodyAttrs' )
69
-
70
- if ( bodyAttrs !== undefined ) {
71
- for ( const [ key , value ] of Object . entries ( bodyAttrs . props ) ) {
72
- $ ( 'body' ) . attr ( key , value )
35
+
36
+ const $ = load ( template )
37
+
38
+ const resolvedTags = await head . resolveTags ( ) as HeadTag [ ]
39
+
40
+ let tags = [ 'title' , 'meta' , 'link' , 'base' , 'style' , 'script' , 'noscript' ]
41
+
42
+ if ( $ ( 'title' ) . length === 1 ) {
43
+ tags = tags . filter ( t => t !== 'title' )
44
+ const title = resolvedTags . find ( t => t . tag === 'title' )
45
+
46
+ if ( title !== undefined ) {
47
+ // @ts -ignore
48
+ $ ( 'title' ) . text ( title . textContent )
49
+ }
73
50
}
74
- }
75
-
76
- const htmlAttrs = resolvedTags . find ( t => t . tag === 'htmlAttrs' )
77
-
78
- if ( htmlAttrs !== undefined ) {
79
- for ( const [ key , value ] of Object . entries ( htmlAttrs . props ) ) {
80
- $ ( 'html' ) . attr ( key , value )
51
+
52
+ tags . map ( tag => {
53
+ resolvedTags . filter ( t => t . tag === tag )
54
+ . map ( t => {
55
+ let props = ''
56
+
57
+ for ( const [ key , value ] of Object . entries ( t . props ) ) {
58
+ props = `${ props } ${ key } ="${ value } "`
59
+ }
60
+
61
+ if ( t . innerHTML !== undefined ) {
62
+ $ ( 'head' ) . append ( `<${ tag } ${ props } >${ t . innerHTML } </${ tag } >` )
63
+ } else {
64
+ $ ( 'head' ) . append ( `<${ tag } ${ props } >` )
65
+ }
66
+ } )
67
+ } )
68
+
69
+ const bodyAttrs = resolvedTags . find ( t => t . tag === 'bodyAttrs' )
70
+
71
+ if ( bodyAttrs !== undefined ) {
72
+ for ( const [ key , value ] of Object . entries ( bodyAttrs . props ) ) {
73
+ $ ( 'body' ) . attr ( key , value )
74
+ }
81
75
}
76
+
77
+ const htmlAttrs = resolvedTags . find ( t => t . tag === 'htmlAttrs' )
78
+
79
+ if ( htmlAttrs !== undefined ) {
80
+ for ( const [ key , value ] of Object . entries ( htmlAttrs . props ) ) {
81
+ $ ( 'html' ) . attr ( key , value )
82
+ }
83
+ }
84
+
85
+ $ ( 'head' ) . append ( preloadLinks )
86
+ $ ( '#app' ) . html ( appHtml )
87
+
88
+ if ( state !== undefined ) {
89
+ $ ( 'body' ) . append ( `<script>window.__INITIAL_STATE__ = ${ devalue ( state ) } </script>` )
90
+ }
91
+
92
+ if ( teleports [ '#teleports' ] !== undefined ) {
93
+ $ ( 'body' ) . append ( `<div id="teleports">${ teleports [ '#teleports' ] } </div>` )
94
+ }
95
+
96
+ res . status ( 200 ) . set ( { 'Content-Type' : 'text/html' } ) . end ( $ . html ( ) )
97
+ } catch ( e ) {
98
+ res . status ( 500 ) . end ( e . message )
82
99
}
83
-
84
- $ ( 'head' ) . append ( preloadLinks )
85
- $ ( '#app' ) . html ( appHtml )
86
-
87
- if ( state !== undefined ) {
88
- $ ( 'body' ) . append ( `<script>window.__INITIAL_STATE__ = ${ devalue ( state ) } </script>` )
89
- }
90
-
91
- if ( teleports [ '#teleports' ] !== undefined ) {
92
- $ ( 'body' ) . append ( `<div id="teleports">${ teleports [ '#teleports' ] } </div>` )
93
- }
94
-
95
- res . status ( 200 ) . set ( { 'Content-Type' : 'text/html' } ) . end ( $ . html ( ) )
96
100
} )
97
101
98
102
app . listen ( port , hostname , ( ) => {
0 commit comments