server.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. // Fichiers statiques
  27. server.get('*.*', express.static(distFolder, {
  28. maxAge: '1y'
  29. }));
  30. // Routes SEO (déplacées depuis Express)
  31. server.get('/sitemap.xml', (req, res) => {
  32. res.header('Content-Type', 'application/xml');
  33. res.sendFile(join(distFolder, 'sitemap.xml'));
  34. });
  35. server.get('/robots.txt', (req, res) => {
  36. res.sendFile(join(distFolder, 'robots.txt'));
  37. });
  38. // Toutes les autres routes
  39. server.get('*', (req, res) => {
  40. res.render(indexHtml, {
  41. req,
  42. providers: [
  43. { provide: APP_BASE_HREF, useValue: req.baseUrl },
  44. { provide: 'CANONICAL_URL', useValue: `https://angular-preprod.foodgame.fr${req.originalUrl}` }
  45. ]
  46. });
  47. });
  48. return server;
  49. }
  50. function run() {
  51. const port = process.env.PORT || 4000;
  52. const server = app();
  53. server.listen(port, () => {
  54. console.log(`Node Express server listening on http://localhost:${port}`);
  55. });
  56. }
  57. declare const __non_webpack_require__: NodeRequire;
  58. const mainModule = __non_webpack_require__.main;
  59. const moduleFilename = mainModule && mainModule.filename || '';
  60. if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
  61. run();
  62. }
  63. export * from './src/main.server';