From b3816f7c96f00c26758b3c9bc68e9c4f04a4d050 Mon Sep 17 00:00:00 2001 From: jlpereira Date: Mon, 28 Aug 2023 21:25:51 -0300 Subject: [PATCH] Add error 500 view, handle redirect for SSR --- server.js | 27 ++++----- src/entry-server.js | 5 +- src/modules/404/router/index.js | 7 --- src/modules/httpErrorPages/router/index.js | 15 +++++ .../index.vue => httpErrorPages/view/404.vue} | 0 src/modules/httpErrorPages/view/500.vue | 11 ++++ .../otus/store/actions/loadCachedMap.js | 9 --- src/modules/otus/store/actions/loadCatalog.js | 20 ------- .../otus/store/actions/loadTaxonomy.js | 18 ------ src/modules/otus/store/store.js | 55 ++++++++++++------- src/modules/otus/views/Index.vue | 13 ++++- 11 files changed, 92 insertions(+), 88 deletions(-) delete mode 100644 src/modules/404/router/index.js create mode 100644 src/modules/httpErrorPages/router/index.js rename src/modules/{404/view/index.vue => httpErrorPages/view/404.vue} (100%) create mode 100644 src/modules/httpErrorPages/view/500.vue delete mode 100644 src/modules/otus/store/actions/loadCachedMap.js delete mode 100644 src/modules/otus/store/actions/loadCatalog.js delete mode 100644 src/modules/otus/store/actions/loadTaxonomy.js diff --git a/server.js b/server.js index 6b8cc10..b467e00 100644 --- a/server.js +++ b/server.js @@ -76,21 +76,22 @@ export async function createServer( render = (await import('./dist/server/entry-server.js')).render } - const [appHtml, appState, preloadLinks, tagMeta] = await render( - url, - manifest, - origin - ) + const [appHtml, appState, preloadLinks, tagMeta, redirectRoute] = + await render(url, manifest, origin) - const html = template - .replace(``, preloadLinks) - .replace(``, appState) - .replace(``, tagMeta.headTags) - .replace(``, tagMeta.bodyTagsOpen) - .replace(``, tagMeta.bodyTags) - .replace(makeAppContainer(), makeAppContainer(appHtml)) + if (redirectRoute) { + res.redirect(redirectRoute) + } else { + const html = template + .replace(``, preloadLinks) + .replace(``, appState) + .replace(``, tagMeta.headTags) + .replace(``, tagMeta.bodyTagsOpen) + .replace(``, tagMeta.bodyTags) + .replace(makeAppContainer(), makeAppContainer(appHtml)) - res.status(200).set({ 'Content-Type': 'text/html' }).end(html) + res.status(200).set({ 'Content-Type': 'text/html' }).end(html) + } } catch (e) { vite && vite.ssrFixStacktrace(e) console.log(e.stack) diff --git a/src/entry-server.js b/src/entry-server.js index f2e99b9..f545e0c 100644 --- a/src/entry-server.js +++ b/src/entry-server.js @@ -23,7 +23,10 @@ export async function render(url, manifest, originUrl) { // itself on ctx.modules. After the render, ctx.modules would contain all the // components that have been instantiated during this render call. const ctx = {} + const initialRoute = router.currentRoute.value.path const html = await renderToString(app, ctx) + const latestRoute = router.currentRoute.value.path + const redirectRoute = initialRoute !== latestRoute && latestRoute const headPayload = await renderSSRHead(getActiveHead()) const renderState = `