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 = `