初探Vue SSR(1)

  • 推荐使用 Node.js 版本 6+。
  • vue-server-renderer 和 vue 必须匹配版本。

const Vue = require('vue')
const server = require('express')()
const renderer = require('vue-server-renderer').createRenderer()

server.get('*', (req, res) => {
  const app = new Vue({
    data: {
      url: req.url
    },
    template: `<div> you visited page is  my demo访问的 URL 是: {{ url }}</div>`
  })

  renderer.renderToString(app, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error')
      return
    }
    res.end(`
      <!DOCTYPE html>
      <html lang="en">
        <head><title>Hello</title></head>
        <body>${html}</body>
      </html>
    `)
  })
})

server.listen(8080)
启动node   app.js

 

 

页面里面乱码的问题:

index.template.html

注意:并没有这一行<!DOCTYPE html>一开始加了打印页面始终undefine


<html>
  <head>
    <!-- 使用双花括号(double-mustache)进行 HTML 转义插值(HTML-escaped interpolation) -->
    <title>{{ title }}</title>

    <!-- 使用三花括号(triple-mustache)进行 HTML 不转义插值(non-HTML-escaped interpolation) -->
    {{{ meta }}}
  </head>
  <body>
    <!--vue-ssr-outlet-->
  </body>
</html>
 
 

 app.js

// 模版渲染
const Vue = require('vue')
const server = require('express')()
const vueRenderer = require('vue-server-renderer')

server.get('*', (req, res) => {
    const context = {
        title: 'hello',
        meta: `
        <meta charset='utf-8'>
        `
    }
      
    const app = new Vue({
        data: {
          url: req.url
        },
        template: `<div>访问的 URL 是: {{ url }}</div>`
      })
    const renderer = vueRenderer.createRenderer({
        template: require('fs').readFileSync('./index.template.html', 'utf-8')
      })
      console.log('renderer--->', renderer)
     renderer.renderToString(app, context, (err, html) => {
        console.log('page---->', html) // html 将是注入应用程序内容的完整页面
        res.end(`${html}`)
    })
    
})

server.listen(8080)

 

 

 
posted @ 2019-09-13 21:25  pikachuWorld  阅读(20)  评论(0编辑  收藏  举报