Skip to content

Remove ssr.paths configuration and replace with ssr.excludePathRegexes which excludes specific paths from SSR #4227

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions config/config.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,17 @@ ssr:
# Determining which styles are critical is a relatively expensive operation; this option is
# disabled (false) by default to boost server performance at the expense of loading smoothness.
inlineCriticalCss: false
# Path prefixes to enable SSR for. By default these are limited to paths of primary DSpace objects.
# NOTE: The "/handle/" path ensures Handle redirects work via SSR. The "/reload/" path ensures
# hard refreshes (e.g. after login) trigger SSR while fully reloading the page.
paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ]
# Regexes to be run against the path of the page to check if SSR is allowed.
# If the path match any of the regexes it will be served directly in CSR.
# By default, excludes community and collection browse, global browse, global search, community list, and statistics.
excludePathRegexes: [
/^\/communities\/[ 0-9a-f ]{ 8 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 12 }\/browse(\/.*)?$/i,
/^\/collections\/[ 0-9a-f ]{ 8 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 4 }-[ 0-9a-f ]{ 12 }\/browse(\/.*)?$/i,
/^\/browse\//,
/^\/search$/,
/^\/community-list$/,
/^\/statistics$/,
]
# Whether to enable rendering of Search component on SSR.
# If set to true the component will be included in the HTML returned from the server side rendering.
# If set to false the component will not be included in the HTML returned from the server side rendering.
Expand Down
12 changes: 11 additions & 1 deletion server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ export function app() {
* The callback function to serve server side angular
*/
function ngApp(req, res, next) {
if (environment.ssr.enabled && req.method === 'GET' && (req.path === '/' || environment.ssr.paths.some(pathPrefix => req.path.startsWith(pathPrefix)))) {
if (environment.ssr.enabled && req.method === 'GET' && (req.path === '/' || !isExcludedFromSsr(req.path, environment.ssr.excludePathRegexes))) {
// Render the page to user via SSR (server side rendering)
serverSideRender(req, res, next);
} else {
Expand Down Expand Up @@ -627,6 +627,16 @@ function start() {
}
}

/**
* Check if SSR should be skipped for path
*
* @param path
* @param excludePathRegexes
*/
function isExcludedFromSsr(path: string, excludePathRegexes: RegExp[]): boolean {
return excludePathRegexes.some((regex) => regex.test(path));
}

/*
* The callback function to serve health check requests
*/
Expand Down
4 changes: 2 additions & 2 deletions src/config/ssr-config.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ export interface SSRConfig extends Config {
replaceRestUrl: boolean;

/**
* Paths to enable SSR for. Defaults to the home page and paths in the sitemap.
* Regexes to match url's path and check if SSR is disabled for it.
*/
paths: Array<string>;
excludePathRegexes: RegExp[];

/**
* Whether to enable rendering of search component on SSR
Expand Down
9 changes: 8 additions & 1 deletion src/environments/environment.production.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,14 @@ export const environment: Partial<BuildConfig> = {
inlineCriticalCss: false,
transferState: true,
replaceRestUrl: true,
paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ],
excludePathRegexes: [
/^\/communities\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/collections\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/browse\//,
/^\/search$/,
/^\/community-list$/,
/^\/statistics$/,
],
enableSearchComponent: false,
enableBrowseComponent: false,
},
Expand Down
9 changes: 8 additions & 1 deletion src/environments/environment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,14 @@ export const environment: BuildConfig = {
inlineCriticalCss: false,
transferState: true,
replaceRestUrl: false,
paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ],
excludePathRegexes: [
/^\/communities\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/collections\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/browse\//,
/^\/search$/,
/^\/community-list$/,
/^\/statistics$/,
],
enableSearchComponent: false,
enableBrowseComponent: false,
},
Expand Down
9 changes: 8 additions & 1 deletion src/environments/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@ export const environment: Partial<BuildConfig> = {
inlineCriticalCss: false,
transferState: true,
replaceRestUrl: false,
paths: [ '/home', '/items/', '/entities/', '/collections/', '/communities/', '/bitstream/', '/bitstreams/', '/handle/', '/reload/' ],
excludePathRegexes: [
/^\/communities\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/collections\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/browse(\/.*)?$/i,
/^\/browse\//,
/^\/search$/,
/^\/community-list$/,
/^\/statistics$/,
],
enableSearchComponent: false,
enableBrowseComponent: false,
},
Expand Down
Loading