import 'zone.js/dist/zone-node'; import 'reflect-metadata'; import { ngExpressEngine } from '@nguniversal/express-engine'; import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; import { resolve } from 'path'; import { enableProdMode } from '@angular/core'; const domino = require('domino'); const win = domino.createWindow(''); global['window'] = win; global['document'] = win.document; global['alert'] = console.log global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest; export async function attachExpress(app, staticDir = "./dist", loggerService = console) { const STATIC_FOLDER = resolve(process.cwd(), staticDir); enableProdMode(); const bundle = require(staticDir + '/server/main'); const ServerApiService = bundle.ServerApiService const serviceObj = new ServerApiService(loggerService) await serviceObj.initialize() app.set('view engine', 'html'); app.engine( 'html', ngExpressEngine({ bootstrap: bundle.AppServerModuleNgFactory, providers: [ provideModuleMap(bundle.LAZY_MODULE_MAP), { provide: bundle.LoggerService, deps: [], useValue: loggerService }, { provide: bundle.IApiService, deps: [], useValue: serviceObj, } ] }) ); app.get('*', (req, res) => { //console.log('*', req.path); res.render(resolve(STATIC_FOLDER, 'browser/index'), { req, res }) }); }