server.ts (1371B)
1 // These are important and needed before anything else 2 import 'zone.js/dist/zone-node'; 3 import 'reflect-metadata'; 4 5 import { enableProdMode } from '@angular/core'; 6 7 import * as express from 'express'; 8 import { join } from 'path'; 9 10 // Faster server renders w/ Prod mode (dev mode never needed) 11 enableProdMode(); 12 13 // Express server 14 const app = express(); 15 16 const PORT = process.env.PORT || 4000; 17 const DIST_FOLDER = join(process.cwd(), 'dist'); 18 19 // * NOTE :: leave this as require() since this file is built Dynamically from webpack 20 const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main'); 21 22 // Express Engine 23 import { ngExpressEngine } from '@nguniversal/express-engine'; 24 // Import module map for lazy loading 25 import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; 26 27 app.engine('html', ngExpressEngine({ 28 bootstrap: AppServerModuleNgFactory, 29 providers: [ 30 provideModuleMap(LAZY_MODULE_MAP) 31 ] 32 })); 33 34 app.set('view engine', 'html'); 35 app.set('views', join(DIST_FOLDER, 'browser')); 36 37 // Server static files from /browser 38 app.get('*.*', express.static(join(DIST_FOLDER, 'browser'))); 39 40 // All regular routes use the Universal engine 41 app.get('*', (req, res) => { 42 res.render('index', { req }); 43 }); 44 45 // Start up the Node server 46 app.listen(PORT, () => { 47 console.log(`Node server listening on http://localhost:${PORT}`); 48 });