diff --git a/server.js b/server.js index b467e00..6fc9a68 100644 --- a/server.js +++ b/server.js @@ -76,22 +76,17 @@ export async function createServer( render = (await import('./dist/server/entry-server.js')).render } - const [appHtml, appState, preloadLinks, tagMeta, redirectRoute] = + const [appHtml, appState, preloadLinks, tagMeta, statusCode] = 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(statusCode).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 f545e0c..5758fb8 100644 --- a/src/entry-server.js +++ b/src/entry-server.js @@ -22,11 +22,10 @@ export async function render(url, manifest, originUrl) { // @vitejs/plugin-vue injects code into a component's setup() that registers // 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 statusCode = router.currentRoute.value.meta?.statusCode || 200 const headPayload = await renderSSRHead(getActiveHead()) const renderState = `