从零开始构建一个vue ssr的项目


一、ssr是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、构建步骤

1.初始化创建一个实例

初始化搭建可以参考这个博客:[https://www.jianshu.com/p/17bc00fc6993](https://www.jianshu.com/p/17bc00fc6993)

1)创建server.js

新建一个文件夹命名为server.js(随意,也可以取自己喜欢的名字),创建一个 vue 服务端渲染的应用程序。
代码参考 ssr官网

// 第 1 步:创建一个 Vue 实例
const Vue = require('vue')
const app = new Vue({
  template: `<div>Hello World</div>`
})

// 第 2 步:创建一个 renderer
const renderer = require('vue-server-renderer').createRenderer()

// 第 3 步:将 Vue 实例渲染为 HTML
renderer.renderToString(app, (err, html) => {
  if (err) throw err
  console.log(html)
  // => <div data-server-rendered="true">Hello World</div>
})

// 在 2.5.0+,如果没有传入回调函数,则会返回 Promise:
renderer.renderToString(app).then(html => {
  console.log(html)
}).catch(err => {
  console.error(err)
})

在terminal里面输入node server.js运行这个文件,结果如下:
在这里插入图片描述

2)构建模板文件

在文件夹里分别建两个同级文件index.htmlindex.js
index.html文件夹里面的内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
    <!-- 使用三花括号(triple-mustache)进行 HTML 不转义插值(non-HTML-escaped interpolation) -->
        {{{meta}}}
</head>
<body>
    <!--vue-ssr-outlet--> <!--这是注入应用程序标记的位置,一定不能删除,会报错的。-->
</body>
</html>

index.js文件夹的内容:

// 参考博客: https://www.jianshu.com/p/17bc00fc6993
// https://ssr.vuejs.org/zh/#什么是服务器端渲染-ssr-?
// SSR: server side renderer
// 后端渲染的框架: Nuxt.js

// $ npm install vue vue-server-renderer --save
// $ npm install express --save

const Vue = require('vue')
const express = require('express')
const fs = require('fs')

const server = express()

//读取模版
//初始化渲染对象
const renderer = require('vue-server-renderer').createRenderer({
    template: fs.readFileSync('./index.html', 'utf-8')
})  
// 此参数是vue 生成Dom之外位置的数据  如vue生成的dom一般位于body中的某个元素容器中,
//此数据可在header标签等位置渲染,是renderer.renderToString()的第二个参数,
//第一个参数是vue实例,第三个参数是一个回调函数。
const context = {
      title: 'Vue-ssr初探',
}

server.get('*', (req, res) => {
      //创建vue实例   主要用于替换index.html中body注释地方的内容,
    //和index.html中 <!--vue-ssr-outlet-->的地方是对应的
    const app = new Vue({
        data: {
            url: req.url,
            data: ['加油,你是最胖的',"哈哈哈哈哈哈哈","你已看的透彻,又何必自找失落"],
            title: '欢迎学习vue-ssr服务端渲染'
        },
        //template 中的文本最外层一定要有容器包裹, 和vue的组件中是一样的,
      //只能有一个父级元素。
        template: `
            <div>
                <div>url : {{url}}</div>
                <p>{{title}}</p>
                <p v-for='item in data'>{{item}}</p>
            </div>
        `
    })

//将 Vue 实例渲染为字符串  (其他的API自己看用法是一样的)
// 参1: vue实例对象
// 参2: 给模板传入的数据
// 参3: 渲染结束的回调,可以拿到最终渲染的html字符串
    renderer.renderToString(app, context,  (err, html) => {
        if (err) {
            res.status(500).end('err:' + err) 
            return 
        }
    //将模版发送给浏览器
        res.end(html)
        console.log('http://localhost:8080/')
    })
})

server.listen(8080,()=>{
    console.log("server running at http://127.0.0.1:8080")
})

3)node index.js查看效果

在terminal里面输入node index.js,访问 http://127.0.0.1:8080或者http://localhost:8080/就可以打开看到页面了。
在这里插入图片描述

2.

未完,后面再补。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值