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 相关文章推荐
关于Javascript 对象(object)的prototype
May 09 Javascript
jQuery中:checkbox选择器用法实例
Jan 03 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
Feb 28 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
详解vue express启动数据服务
Jul 05 Javascript
微信小程序template模板实例详解
Oct 27 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
Dec 28 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
vue的$http的get请求要加上params操作
Nov 12 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
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
php中error与exception的区别及应用
2014/07/28 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python之父谈Python的未来形式
2016/07/01 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
简单了解如何封装自己的Python包
2020/07/08 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
促销活动总结报告
2014/04/26 职场文书
国际会计专业求职信
2014/08/04 职场文书
党员自我对照检查材料
2014/08/19 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书