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 相关文章推荐
jquery(live)中File input的change方法只起一次作用的解决办法
Oct 21 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
JavaScript中用getDate()方法返回指定日期的教程
Jun 09 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
Dec 26 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 Javascript
JS实现4位随机验证码
Oct 19 Javascript
通过JS判断网页是否为手机打开
Oct 28 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
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
php 更新数据库中断的解决方法
2009/06/05 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python二分法搜索算法实例分析
2015/05/11 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python 序列的方法总结
2016/10/18 Python
python生成ppt的方法
2018/06/07 Python
python面试题小结附答案实例代码
2019/04/11 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
2015年秋季新学期寄语
2015/03/25 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android