mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
Merge pull request #2078 from atmire/restore-csr-fallback
Let the production server "serve for direct CSR" if SSR is disabled or fails
This commit is contained in:
12
server.ts
12
server.ts
@@ -37,7 +37,6 @@ import { json } from 'body-parser';
|
||||
import { existsSync, readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
|
||||
import { APP_BASE_HREF } from '@angular/common';
|
||||
import { enableProdMode } from '@angular/core';
|
||||
|
||||
import { ngExpressEngine } from '@nguniversal/express-engine';
|
||||
@@ -65,7 +64,7 @@ const DIST_FOLDER = join(process.cwd(), 'dist/browser');
|
||||
// Set path fir IIIF viewer.
|
||||
const IIIF_VIEWER = join(process.cwd(), 'dist/iiif');
|
||||
|
||||
const indexHtml = existsSync(join(DIST_FOLDER, 'index.html')) ? 'index.html' : 'index';
|
||||
const indexHtml = join(DIST_FOLDER, 'index.html');
|
||||
|
||||
const cookieParser = require('cookie-parser');
|
||||
|
||||
@@ -258,7 +257,6 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
|
||||
baseUrl: environment.ui.nameSpace,
|
||||
originUrl: environment.ui.baseUrl,
|
||||
requestUrl: req.originalUrl,
|
||||
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }]
|
||||
}, (err, data) => {
|
||||
if (hasNoValue(err) && hasValue(data)) {
|
||||
// save server side rendered page to cache (if any are enabled)
|
||||
@@ -292,13 +290,7 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
|
||||
* @param res current response
|
||||
*/
|
||||
function clientSideRender(req, res) {
|
||||
res.render(indexHtml, {
|
||||
req,
|
||||
providers: [{
|
||||
provide: APP_BASE_HREF,
|
||||
useValue: req.baseUrl
|
||||
}]
|
||||
});
|
||||
res.sendFile(indexHtml);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,18 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<base href="/">
|
||||
<title>DSpace</title>
|
||||
<meta name="viewport" content="width=device-width,minimum-scale=1">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<ds-app></ds-app>
|
||||
</body>
|
||||
|
||||
<!-- this is needed for CSR fallback -->
|
||||
<script async src="client.js"></script>
|
||||
|
||||
</html>
|
@@ -2,21 +2,27 @@ import 'zone.js';
|
||||
import 'reflect-metadata';
|
||||
import 'core-js/es/reflect';
|
||||
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
import { load as loadWebFont } from 'webfontloader';
|
||||
|
||||
import { hasValue } from './app/shared/empty.util';
|
||||
|
||||
import { BrowserAppModule } from './modules/app/browser-app.module';
|
||||
|
||||
import { environment } from './environments/environment';
|
||||
import { AppConfig } from './config/app-config.interface';
|
||||
import { extendEnvironmentWithAppConfig } from './config/config.util';
|
||||
import { enableProdMode } from '@angular/core';
|
||||
|
||||
const bootstrap = () => platformBrowserDynamic()
|
||||
.bootstrapModule(BrowserAppModule, {});
|
||||
|
||||
/**
|
||||
* We use this to determine have been serven SSR HTML or not.
|
||||
*
|
||||
* At this point, {@link environment} may not be in sync with the configuration.
|
||||
* Therefore, we cannot depend on it to determine how to bootstrap the app.
|
||||
*/
|
||||
const hasTransferState = document.querySelector('script#dspace-angular-state') !== null;
|
||||
|
||||
const main = () => {
|
||||
// Load fonts async
|
||||
// https://github.com/typekit/webfontloader#configuration
|
||||
@@ -30,22 +36,23 @@ const main = () => {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
if (hasValue(environment.universal) && environment.universal.preboot) {
|
||||
if (hasTransferState) {
|
||||
// Configuration will be taken from transfer state during initialization
|
||||
return bootstrap();
|
||||
} else {
|
||||
// Configuration must be fetched explicitly
|
||||
return fetch('assets/config.json')
|
||||
.then((response) => response.json())
|
||||
.then((appConfig: AppConfig) => {
|
||||
// extend environment with app config for browser when not prerendered
|
||||
extendEnvironmentWithAppConfig(environment, appConfig);
|
||||
|
||||
return bootstrap();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// support async tag or hmr
|
||||
if (document.readyState === 'complete' && hasValue(environment.universal) && !environment.universal.preboot) {
|
||||
if (document.readyState === 'complete' && !hasTransferState) {
|
||||
main();
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', main);
|
||||
|
Reference in New Issue
Block a user