| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | // These are important and needed before anything else
 | 
					
						
							|  |  |  | import 'zone.js/dist/zone-node'; | 
					
						
							|  |  |  | import 'reflect-metadata'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { enableProdMode } from '@angular/core'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import * as express from 'express'; | 
					
						
							|  |  |  | import { join } from 'path'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Faster server renders w/ Prod mode (dev mode never needed)
 | 
					
						
							|  |  |  | enableProdMode(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Express server
 | 
					
						
							|  |  |  | const app = express(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const PORT = process.env.PORT || 4000; | 
					
						
							|  |  |  | const DIST_FOLDER = join(process.cwd(), 'dist'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // * NOTE :: leave this as require() since this file is built Dynamically from webpack
 | 
					
						
							| 
									
										
										
										
											2018-05-02 07:13:32 -05:00
										 |  |  | const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main'); | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Express Engine
 | 
					
						
							|  |  |  | import { ngExpressEngine } from '@nguniversal/express-engine'; | 
					
						
							|  |  |  | // Import module map for lazy loading
 | 
					
						
							|  |  |  | import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // #docregion ngExpressEngine
 | 
					
						
							|  |  |  | app.engine('html', ngExpressEngine({ | 
					
						
							|  |  |  |   bootstrap: AppServerModuleNgFactory, | 
					
						
							|  |  |  |   providers: [ | 
					
						
							|  |  |  |     provideModuleMap(LAZY_MODULE_MAP) | 
					
						
							|  |  |  |   ] | 
					
						
							|  |  |  | })); | 
					
						
							|  |  |  | // #enddocregion ngExpressEngine
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.set('view engine', 'html'); | 
					
						
							|  |  |  | app.set('views', join(DIST_FOLDER, 'browser')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // #docregion data-request
 | 
					
						
							|  |  |  | // TODO: implement data requests securely
 | 
					
						
							|  |  |  | app.get('/api/*', (req, res) => { | 
					
						
							|  |  |  |   res.status(404).send('data requests are not supported'); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | // #enddocregion data-request
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // #docregion static
 | 
					
						
							|  |  |  | // Server static files from /browser
 | 
					
						
							|  |  |  | app.get('*.*', express.static(join(DIST_FOLDER, 'browser'))); | 
					
						
							|  |  |  | // #enddocregion static
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // #docregion navigation-request
 | 
					
						
							|  |  |  | // All regular routes use the Universal engine
 | 
					
						
							|  |  |  | app.get('*', (req, res) => { | 
					
						
							| 
									
										
										
										
											2018-05-02 07:13:32 -05:00
										 |  |  |   res.render('index', { req }); | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | }); | 
					
						
							|  |  |  | // #enddocregion navigation-request
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Start up the Node server
 | 
					
						
							|  |  |  | app.listen(PORT, () => { | 
					
						
							|  |  |  |   console.log(`Node server listening on http://localhost:${PORT}`); | 
					
						
							|  |  |  | }); |