@@ -273,10 +273,6 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
273273 requestUrl : req . originalUrl ,
274274 } , ( err , data ) => {
275275 if ( hasNoValue ( err ) && hasValue ( data ) ) {
276- // Fix missing base href in SSR output
277- const baseHref = `${ environment . ui . nameSpace } ${ environment . ui . nameSpace . endsWith ( '/' ) ? '' : '/' } ` ;
278- data = data . replace ( / < b a s e h r e f = " .* ?" > / , `<base href="${ baseHref } ">` ) ;
279-
280276 // Replace REST URL with UI URL
281277 if ( environment . universal . replaceRestUrl && REST_BASE_URL !== environment . rest . baseUrl ) {
282278 data = data . replace ( new RegExp ( REST_BASE_URL , 'g' ) , environment . rest . baseUrl ) ;
@@ -307,13 +303,24 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
307303 } ) ;
308304}
309305
310- /**
311- * Send back response to user to trigger direct client-side rendering (CSR)
312- * @param req current request
313- * @param res current response
314- */
306+ // Read file once at startup
307+ const indexHtmlContent = readFileSync ( indexHtml , 'utf8' ) ;
308+
315309function clientSideRender ( req , res ) {
316- res . sendFile ( indexHtml ) ;
310+ const namespace = environment . ui . nameSpace || '/' ;
311+ let html = indexHtmlContent ;
312+ // Replace base href dynamically
313+ html = html . replace (
314+ / < b a s e h r e f = " [ ^ " ] * " > / ,
315+ `<base href="${ namespace . endsWith ( '/' ) ? namespace : namespace + '/' } ">`
316+ ) ;
317+
318+ // Replace REST URL with UI URL
319+ if ( environment . universal . replaceRestUrl && REST_BASE_URL !== environment . rest . baseUrl ) {
320+ html = html . replace ( new RegExp ( REST_BASE_URL , 'g' ) , environment . rest . baseUrl ) ;
321+ }
322+
323+ res . send ( html ) ;
317324}
318325
319326
0 commit comments