68 lines
1.8 KiB
TypeScript
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)
|
|
}
|
|
});
|
|
}
|