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(''); const fetch = require('node-fetch'); global['window'] = win; global['document'] = win.document; global['alert'] = console.log global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest; global['fetch'] = fetch.default; export async function attachExpress(app, staticDir = "./dist", logger = console) { const STATIC_FOLDER = resolve(process.cwd(), staticDir); enableProdMode(); const loggerService = { warn: (...args) => logger.error(...args), error: (...args) => logger.warn(...args), log: (...args) => logger.info(...args), table: (...args) => logger.info(...args), collapsed: (msg, type, ...args) => loggerService[type](msg, ...args) } const bundle = require(staticDir + '/server/main'); const ServerApiService = bundle.ServerApiService const serviceObj = new ServerApiService(logger) 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); try{ res.render(resolve(STATIC_FOLDER, 'browser/index'), { req, res }) }catch(e){ loggerService.error(e) } }); }