Files
frontcraft/src/frontend/server.ts
T

68 lines
1.8 KiB
TypeScript

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)
}
});
}