1
- import 'zone.js/dist/zone-node' ;
2
- import 'reflect-metadata' ;
3
- import { renderModuleFactory } from '@angular/platform-server' ;
4
- import { enableProdMode } from '@angular/core' ;
5
-
6
1
import * as express from 'express' ;
7
2
import { join } from 'path' ;
8
3
import { readFileSync } from 'fs' ;
9
4
10
- // Faster server renders w/ Prod mode (dev mode never needed)
11
- enableProdMode ( ) ;
12
-
13
5
// Express server
14
6
const app = express ( ) ;
15
7
@@ -20,36 +12,41 @@ const DIST_FOLDER = join(process.cwd(), 'dist');
20
12
const template = readFileSync ( join ( DIST_FOLDER , 'browser' , 'index.html' ) ) . toString ( ) ;
21
13
22
14
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
23
- const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require ( './dist/server/main.bundle' ) ;
24
-
25
- // Express Engine
26
- import { ngExpressEngine } from '@nguniversal/express-engine' ;
27
- // Import module map for lazy loading
28
- import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader' ;
29
-
30
- // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
31
- app . engine ( 'html' , ngExpressEngine ( {
32
- bootstrap : AppServerModuleNgFactory ,
33
- providers : [
34
- provideModuleMap ( LAZY_MODULE_MAP )
35
- ]
36
- } ) ) ;
15
+ const {
16
+ AppServerModule,
17
+ AppServerModuleNgFactory,
18
+ LAZY_MODULE_MAP ,
19
+ provideModuleMap,
20
+ renderModule,
21
+ renderModuleFactory,
22
+ enableProdMode
23
+ } = require ( './dist/server/main.bundle' ) ;
24
+
25
+ enableProdMode ( ) ;
37
26
38
27
app . set ( 'view engine' , 'html' ) ;
39
28
app . set ( 'views' , join ( DIST_FOLDER , 'browser' ) ) ;
40
29
41
- /* - Example Express Rest API endpoints -
42
- app.get('/api/**', (req, res) => { });
43
- */
44
-
45
30
// Server static files from /browser
46
31
app . get ( '*.*' , express . static ( join ( DIST_FOLDER , 'browser' ) , {
47
32
maxAge : '1y'
48
33
} ) ) ;
49
34
50
- // ALl regular routes use the Universal engine
35
+ // All regular routes use Angular SSR
51
36
app . get ( '*' , ( req , res ) => {
52
- res . render ( 'index' , { req } ) ;
37
+ const renderOptions = {
38
+ document : template ,
39
+ url : req . url ,
40
+ extraProviders : [ provideModuleMap ( LAZY_MODULE_MAP ) ]
41
+ } ;
42
+
43
+ const renderPromise = AppServerModuleNgFactory
44
+ ? /* prod mode */ renderModuleFactory ( AppServerModuleNgFactory , renderOptions )
45
+ : /* dev mode */ renderModule ( AppServerModule , renderOptions ) ;
46
+
47
+ renderPromise
48
+ . then ( html => res . send ( html ) , err => res . send ( err ) )
49
+ . then ( ( ) => res . end ( ) ) ;
53
50
} ) ;
54
51
55
52
// Start up the Node server
0 commit comments