首页  >  问答  >  正文

将标题重写为:在Vue 3中,如何使用SSR将数据从Node.js传递

<p>我正在使用vue.js 3构建一个网站,我想使用服务器端渲染。我还想能够从我的fastify(或express)服务器传递数据给vue.js 3。有没有办法可以做到这一点(我看到了一个叫做express-vue的东西:github链接,但它是为vue 2而不是官方的,所以我不知道它是否好用)?而且你能否包含客户端的hydration,因为我看到了一些例子,比如https://github.com/moduslabs/vue3-example-ssr,但它不包括客户端的hydration,如果这不可能的话,我会使用ejs,但我更喜欢vue 3。你能给我一个示例或模板吗?提前谢谢!</p>
P粉078945182P粉078945182442 天前596

全部回复(1)我来回复

  • P粉336536706

    P粉3365367062023-08-26 09:55:40

    您可以将上述内容翻译成中文:

    <p>您可以将上下文对象传递给renderToString函数</p>
    <pre><code>const context = { data: 'Hello world' } // 您想要共享的数据
    const html = renderToString(App, context)
    </code></pre>
    <p>在Vue组件中,可以使用useSSRContext来访问此对象</p>
    <pre><code>setup() {
        if (typeof window === 'undefined') {
            const context = useSSRContext()
            console.log(context.data) // Hello world
        }
    }
    </code></pre>
    <p>与Vue 2不同,您无需在<div id="app">中添加data-server-rendered="true",当您在浏览器上使用createSSRApp而不是createApp时,Vue 3会自动进行客户端渲染</p>
    <hr />
    <p>要在浏览器中传递对象,您需要在从服务器返回结果时将其写入<head>中的window变量中</p>
    <pre><code>const html = renderToString(App, context)
    
    res.send(`
        <html>
        <head>
            <script>window.context = ${JSON.stringify(JSON.stringify(context))}</script>
        </head>
            <body><div id="app">${html}</div></body>
            <script src="main.js"></script>
        </html>
    `)
    </code></pre>

    回复
    0
  • 取消回复