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 相关文章推荐
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 Javascript
Javascript连接多个数组不用concat来解决
Mar 24 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
javascript 判断是否是微信浏览器的方法
Oct 09 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
jquery.flot.js简单绘制折线图用法示例
Mar 13 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php 多关键字 高亮显示实现代码
2012/04/23 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
网页自动跳转代码收集
2009/09/27 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python处理二进制数据的方法
2015/06/03 Python
python操作mysql代码总结
2018/06/01 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
python 制作简单的音乐播放器
2020/11/25 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
领导干部失职检讨书
2015/05/05 职场文书
活动总结模板大全
2015/05/11 职场文书
2016高考寄语集锦
2015/12/04 职场文书
js不常见操作运算符总结
2021/11/20 Javascript