server.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import 'zone.js/dist/zone-node';
  2. import { ngExpressEngine } from '@nguniversal/express-engine';
  3. import * as express from 'express';
  4. import { join } from 'path';
  5. import { AppServerModule } from './src/main.server';
  6. import { APP_BASE_HREF } from '@angular/common';
  7. import { existsSync } from 'fs';
  8. const domino = require('domino');
  9. const fs = require('fs');
  10. const path = require('path');
  11. const distFolder = join(process.cwd(), 'dist/fatboar/browser');
  12. const indexHtml = existsSync(join(distFolder, 'index.html')) ? 'index.html' : 'index';
  13. const template = fs.readFileSync(join(distFolder, indexHtml)).toString();
  14. const win = domino.createWindow(template);
  15. global['window'] = win;
  16. global['document'] = win.document;
  17. global['navigator'] = win.navigator;
  18. global['CSS'] = null;
  19. export function app() {
  20. const server = express();
  21. server.engine('html', ngExpressEngine({
  22. bootstrap: AppServerModule,
  23. }));
  24. server.set('view engine', 'html');
  25. server.set('views', distFolder);
  26. server.get('*.*', express.static(distFolder, {
  27. maxAge: '1y'
  28. }));
  29. server.get('*', (req, res) => {
  30. res.render(indexHtml, {
  31. req,
  32. providers: [
  33. { provide: APP_BASE_HREF, useValue: req.baseUrl },
  34. { provide: 'CANONICAL_URL', useValue: `https://angular-preprod.foodgame.fr${req.originalUrl}` }
  35. ]
  36. });
  37. });
  38. return server;
  39. }
  40. function run() {
  41. const port = process.env.PORT || 4000;
  42. const server = app();
  43. server.listen(port, () => {
  44. console.log(`Node Express server listening on http://localhost:${port}`);
  45. });
  46. }
  47. declare const __non_webpack_require__: NodeRequire;
  48. const mainModule = __non_webpack_require__.main;
  49. const moduleFilename = mainModule && mainModule.filename || '';
  50. if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
  51. run();
  52. }
  53. export * from './src/main.server';