Created
November 8, 2022 17:41
-
-
Save joldibaev/6c09a95c6259ba9f9b22bd5c9b68e5e6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*************************************************************************************************** | |
* Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. | |
*/ | |
import '@angular/localize/init'; | |
import 'zone.js/node'; | |
import {APP_BASE_HREF} from '@angular/common'; | |
import {ngExpressEngine} from '@nguniversal/express-engine'; | |
import * as express from 'express'; | |
import {existsSync} from 'fs'; | |
import {join} from 'path'; | |
import {AppServerModule} from './src/main.server'; | |
import {environment} from "./src/environments/environment"; | |
// The Express app is exported so that it can be used by serverless Functions. | |
export function app(locale: string): express.Express { | |
const server = express(); | |
const distFolder = join(process.cwd(), join('dist', environment.production ? 'prod' : 'dev', 'browser', locale)); | |
const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index'; | |
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/main/modules/express-engine) | |
server.engine('html', ngExpressEngine({ | |
bootstrap: AppServerModule, | |
})); | |
server.set('view engine', 'html'); | |
server.set('views', distFolder); | |
// Example Express Rest API endpoints | |
// server.get('/api/**', (req, res) => { }); | |
// Serve static files from /browser | |
server.get('*.*', express.static(distFolder, { | |
maxAge: '1y' | |
})); | |
// All regular routes use the Universal engine | |
server.get('*', (req, res) => { | |
res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] }); | |
}); | |
return server; | |
} | |
function run(): void { | |
const port = process.env['PORT'] ?? 4000; | |
const server = express(); | |
const allowedLanguages = [ | |
{code: 'ru', urlPrefix: '/ru'}, | |
{code: 'en', urlPrefix: '/'}, | |
]; | |
allowedLanguages.forEach((language) => { | |
server.use(language.urlPrefix, app(language.code)); | |
}); | |
server.listen(port, () => { | |
console.log(`Node Express server listening on http://localhost:${port} (DEV SERVER)`); | |
}); | |
} | |
// Webpack will replace 'require' with '__webpack_require__' | |
// '__non_webpack_require__' is a proxy to Node 'require' | |
// The below code is to ensure that the server is run only when not requiring the bundle. | |
declare const __non_webpack_require__: NodeRequire; | |
const mainModule = __non_webpack_require__.main; | |
const moduleFilename = mainModule && mainModule.filename || ''; | |
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { | |
run(); | |
} | |
export * from './src/main.server'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment