Vue 2.0 服务端渲染入门介绍


Posted in Javascript onMarch 29, 2017

1 什么是服务端渲染 SSR

server side render

就是通过后端吐模板,而不是通过前端ajax获取数据,拼接字符串。

2 为什么需要SSR

需要SEO,因为爬虫不会等待ajax结果。

客户端网络慢,加载速度慢,影响用户体验。

3 另一种解决办法 预渲染

不是一次性下载整个单页应用,预渲染只是在构建时为了特定的路由生成特定的几个静态页面

你用webpack可以很简单地通过prerender-spa-plugin来添加预渲染

 4 NodeJS编写Vue的SSR

首先npm install --save-dev的有 vue express vue-server-renderer

// server.js

'use strict';

var fs = require('fs');
var path = require('path');

global.Vue = require('vue')

var layout = fs.readFileSync('./index.html', 'utf8')

var renderer = require('vue-server-renderer').createRenderer()

var express = require('express')
var server = express()

server.use('/assets',express.static(
  path.resolve(__dirname,'assets')
))


server.get('*',function(req, res){

  // 将Vue实例渲染成HTML
  renderer.renderToString(
    // 创建一个应用实例
    require('./assets/app')(),

    // 处理渲染结果
    function(error, html){
      if(error){
        console.error(error);
        return res
          .status(500)
          .send('Server Error')
      }
      // 发送布局和HTML文件
      res.send(layout.replace('<div id="app"></div>', html))

    }
  )
})


server.listen(5000, function(error){
  if(error) throw errorr;
  console.log('Server is running at localhost:5000')
})
// index.html 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="" charset="utf-8"></script>
  <script src="/assets/vue.js" charset="utf-8"></script>
</head>
<body>

  <div id="app"></div>
  <script src="/assets/app.js" charset="utf-8"></script>
  <script type="text/javascript">app.$mount('#app')</script>


</body>
</html>
// assets/app.js

(function() {
  'use strict'
  var createApp = function() {
    return new Vue({
      template: '<div id="app">你已经在这花了 {{ counter }} 秒。</div>',
      data: {
        counter: 0
      },
      created: function() {
        var vm = this;
        setInterval(function(){
          vm.counter += 1;
        },1000)
      }
    })
  }

  // 暴露接口
  if(typeof module !== 'undefined' && module.exports) {
    module.exports = createApp
  } else {
    this.app = createApp()
  }

}).call(this)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
JavaScript中的Window窗口对象
Jan 16 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
js日期时间补零的小例子
Mar 05 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
Jul 09 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
javascript事件的绑定基础实例讲解(34)
Feb 14 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
May 03 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
May 09 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
JS控制只能输入数字并且最多允许小数点两位
Nov 24 Javascript
vue2组件实现懒加载浅析
Mar 29 #Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 #Javascript
如何使用Bootstrap创建表单
Mar 29 #Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 #Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 #jQuery
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 #Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 #jQuery
You might like
浅谈电磁辐射对健康的影响
2021/03/01 无线电
实用函数7
2007/11/08 PHP
PHP多个版本的分析解释
2011/07/21 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
Angular工具方法学习
2016/12/26 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
详解javascript常用工具类的封装
2018/01/30 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
Python爬取京东的商品分类与链接
2016/08/26 Python
利用Python开发实现简单的记事本
2016/11/15 Python
Python实现二维数组输出为图片
2018/04/03 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
寻找最美家庭活动方案
2014/08/20 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
云台山导游词
2015/02/03 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript