| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | import 'zone.js/dist/zone-node'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  | import { ngExpressEngine } from '@nguniversal/express-engine'; | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | import * as express from 'express'; | 
					
						
							|  |  |  | import { join } from 'path'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  | import { AppServerModule } from './src/main.server'; | 
					
						
							|  |  |  | import { APP_BASE_HREF } from '@angular/common'; | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  | import { existsSync } from 'fs'; | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  | // The Express app is exported so that it can be used by serverless Functions.
 | 
					
						
							|  |  |  | export function app() { | 
					
						
							|  |  |  |   const server = express(); | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  |   const distFolder = join(process.cwd(), 'dist/browser'); | 
					
						
							|  |  |  |   const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index'; | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   // #docregion ngExpressEngine
 | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  |   // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   server.engine('html', ngExpressEngine({ | 
					
						
							|  |  |  |     bootstrap: AppServerModule, | 
					
						
							|  |  |  |   })); | 
					
						
							|  |  |  |   // #enddocregion ngExpressEngine
 | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   server.set('view engine', 'html'); | 
					
						
							|  |  |  |   server.set('views', distFolder); | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   // #docregion data-request
 | 
					
						
							|  |  |  |   // TODO: implement data requests securely
 | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  |   server.get('/api/**', (req, res) => { | 
					
						
							|  |  |  |     res.status(404).send('data requests are not yet supported'); | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   }); | 
					
						
							|  |  |  |   // #enddocregion data-request
 | 
					
						
							| 
									
										
										
										
											2017-10-30 23:39:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   // #docregion static
 | 
					
						
							|  |  |  |   // Serve static files from /browser
 | 
					
						
							|  |  |  |   server.get('*.*', express.static(distFolder, { | 
					
						
							|  |  |  |     maxAge: '1y' | 
					
						
							|  |  |  |   })); | 
					
						
							|  |  |  |   // #enddocregion static
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // #docregion navigation-request
 | 
					
						
							|  |  |  |   // All regular routes use the Universal engine
 | 
					
						
							|  |  |  |   server.get('*', (req, res) => { | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  |     res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] }); | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   }); | 
					
						
							|  |  |  |   // #enddocregion navigation-request
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return server; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function run() { | 
					
						
							|  |  |  |   const port = process.env.PORT || 4000; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Start up the Node server
 | 
					
						
							|  |  |  |   const server = app(); | 
					
						
							|  |  |  |   server.listen(port, () => { | 
					
						
							|  |  |  |     console.log(`Node Express server listening on http://localhost:${port}`); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Webpack will replace 'require' with '__webpack_require__'
 | 
					
						
							|  |  |  | // '__non_webpack_require__' is a proxy to Node 'require'
 | 
					
						
							|  |  |  | // The below code is to ensure that the server is run only when not requiring the bundle.
 | 
					
						
							|  |  |  | declare const __non_webpack_require__: NodeRequire; | 
					
						
							|  |  |  | const mainModule = __non_webpack_require__.main; | 
					
						
							| 
									
										
										
										
											2020-04-08 15:27:42 +03:00
										 |  |  | const moduleFilename = mainModule && mainModule.filename || ''; | 
					
						
							|  |  |  | if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { | 
					
						
							| 
									
										
										
										
											2019-10-08 19:31:44 +02:00
										 |  |  |   run(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export * from './src/main.server'; |