Files
SnowLuma/.pnpm-store/v11/files/cd/c7e79dc842ea681111530896d9288b63f71624e0d0eb31c4d2925601e68561e88a8f4d55c28ea144fe17bbf9d2dd742ef8619d73c9d244a56c3b5f288a66ca
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

37 lines
947 B
Plaintext

import ReactDOMServer from 'react-dom/server'
import type { ReactNode } from 'react'
import type { AnyRouter } from '@tanstack/router-core'
export const renderRouterToString = async ({
router,
responseHeaders,
children,
}: {
router: AnyRouter
responseHeaders: Headers
children: ReactNode
}) => {
try {
let html = ReactDOMServer.renderToString(children)
router.serverSsr!.setRenderFinished()
const injectedHtml = router.serverSsr!.takeBufferedHtml()
if (injectedHtml) {
html = html.replace(`</body>`, () => `${injectedHtml}</body>`)
}
return new Response(`<!DOCTYPE html>${html}`, {
status: router.stores.statusCode.get(),
headers: responseHeaders,
})
} catch (error) {
console.error('Render to string error:', error)
return new Response('Internal Server Error', {
status: 500,
headers: responseHeaders,
})
} finally {
router.serverSsr?.cleanup()
}
}