Browse Source

refactoring

feature/ssr-migration-schematic
erdemcaygor 7 months ago
parent
commit
bf86beb5c5
  1. 21
      npm/ng-packs/apps/dev-app/src/server.ts
  2. 78
      npm/ng-packs/apps/dev-app/src/server_legacy.ts
  3. 1
      npm/ng-packs/apps/dev-app/tsconfig.server.json
  4. 10
      npm/ng-packs/package.json

21
npm/ng-packs/apps/dev-app/src/server.ts

@ -1,8 +1,5 @@
import { environment } from './environments/environment';
if (environment.production === false) {
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
}
import 'zone.js/node';
import { APP_BASE_HREF } from '@angular/common';
import { CommonEngine } from '@angular/ssr/node';
import express from 'express';
@ -24,19 +21,19 @@ export function app(): express.Express {
server.set('views', distFolder);
// Example Express Rest API endpoints
// server.get('/api/**', (req, res) => { });
// server.get('/api/{*splat}', (req, res) => { });
// Serve static files from /browser
server.get('/.well-known/*', (_, res) => res.sendStatus(404));
server.get(
'*.*',
server.use(
express.static(distFolder, {
maxAge: '1y',
index: false,
}),
);
// All regular routes use the Angular engine
server.get('*', (req, res, next) => {
server.use((req, res, next) => {
const { protocol, originalUrl, baseUrl, headers } = req;
commonEngine
.render({
bootstrap,
@ -60,7 +57,11 @@ function run(): void {
// Start up the Node server
const server = app();
server.listen(port, () => {
server.listen(port, error => {
if (error) {
throw error;
}
console.log(`Node Express server listening on http://localhost:${port}`);
});
}

78
npm/ng-packs/apps/dev-app/src/server_legacy.ts

@ -0,0 +1,78 @@
import { environment } from './environments/environment';
if (environment.production === false) {
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
}
import 'zone.js/node';
import { APP_BASE_HREF } from '@angular/common';
import { CommonEngine } from '@angular/ssr/node';
import express from 'express';
import { existsSync } from 'node:fs';
import { join } from 'node:path';
import bootstrap from './main.server';
// The Express app is exported so that it can be used by serverless Functions.
export function app(): express.Express {
const server = express();
const distFolder = join(process.cwd(), 'dist/dev-app/browser');
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
? join(distFolder, 'index.original.html')
: join(distFolder, 'index.html');
const commonEngine = new CommonEngine();
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('/.well-known/*', (_, res) => res.sendStatus(404));
server.get(
'*.*',
express.static(distFolder, {
maxAge: '1y',
}),
);
// All regular routes use the Angular engine
server.get('*', (req, res, next) => {
const { protocol, originalUrl, baseUrl, headers } = req;
commonEngine
.render({
bootstrap,
documentFilePath: indexHtml,
url: `${protocol}://${headers.host}${originalUrl}`,
publicPath: distFolder,
providers: [
{ provide: APP_BASE_HREF, useValue: baseUrl },
{ provide: 'cookies', useValue: JSON.stringify(req.headers.cookie) },
],
})
.then(html => res.send(html))
.catch(err => next(err));
});
return server;
}
function run(): void {
const port = process.env['PORT'] || 4000;
// Start up the Node server
const server = app();
server.listen(port, () => {
console.log(`Node Express server listening on http://localhost:${port}`);
});
}
// 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 default bootstrap;

1
npm/ng-packs/apps/dev-app/tsconfig.server.json

@ -11,6 +11,7 @@
},
"files": [
"src/main.server.ts",
"src/server.ts",
"src/server.ts"
]
}

10
npm/ng-packs/package.json

@ -68,10 +68,9 @@
"@angular/localize": "~20.0.0",
"@angular/platform-browser": "~20.0.0",
"@angular/platform-browser-dynamic": "~20.0.0",
"@angular/platform-server": "~20.0.0",
"@angular/router": "~20.0.0",
"@angular/ssr": "~20.0.0",
"@angular/platform-server": "~20.0.0",
"express": "~4.18.0",
"@fortawesome/fontawesome-free": "^6.0.0",
"@ng-bootstrap/ng-bootstrap": "~19.0.0",
"@ngneat/spectator": "~19.6.2",
@ -92,7 +91,7 @@
"@swc/core": "~1.5.0",
"@swc/helpers": "~0.5.0",
"@swimlane/ngx-datatable": "~21.1.0",
"@types/express": "^4.17.17",
"@types/express": "~5.0.0",
"@types/jest": "29.5.14",
"@types/node": "^18.18.0",
"@typescript-eslint/eslint-plugin": "7.16.0",
@ -109,6 +108,7 @@
"eslint": "^8.0.0",
"eslint-config-prettier": "10.0.0",
"eslint-plugin-cypress": "^2.10.3",
"express": "~4.18.0",
"got": "^11.0.0",
"jest": "^29.0.0",
"jest-canvas-mock": "^2.0.0",
@ -144,5 +144,7 @@
"npx prettier --write --config .prettierrc "
]
},
"dependencies": {}
"dependencies": {
"express": "^5.1.0"
}
}

Loading…
Cancel
Save