Vue2 SSR渲染根据不同页面修改 meta


Posted in Javascript onNovember 20, 2017

本文主要介绍了Vue2 SSR渲染根据不同页面修改 meta,分享给大家,具体如下:

注意:

经过测试, vue-meta 会导致内存泄漏, 请慎用…

以现在 vue2 的 服务端渲染模式, 都是通过 webpack 生成 html 模版文件(或者直接在 server.js 里拼接), 然后通过fs.readFileSync 读取该文件, 再通过 res.end 输出, 这样就造成 meta 修改很麻烦

这时候我们可以借助 vue-meta 来管理, 下面以官方的vue-hackernews-2.0为例, 说下使用方法:

安装

Yarn

yarn add vue-meta

NPM

npm install vue-meta --save

准备插件

在router/index.js里添加

import Vue from 'vue'
import Router from 'vue-router'
import Meta from 'vue-meta'
 
Vue.use(Router)
Vue.use(Meta)
 
export default new Router({
 // ...
})

服务端渲染

在server-entry.js里添加

import { app, router, store } from './app'
 
const isDev = process.env.NODE_ENV !== 'production'
const meta = app.$meta() // 这行
 
export default context => {
 router.push(context.url)
 context.meta = meta // 这行
 const ss = isDev && Date.now()
 // ...
}

在server.js里修改

renderStream.once('data', () => {
 res.write(indexHTML.head)
})


renderStream.once('data', () => {
 const { title, meta } = context.meta.inject()
 indexHTML.head = indexHTML.head.replace(/<title.*?<\/title>/g, title.text())
 indexHTML.head = indexHTML.head.replace(/<meta.*?name="description".*?\/>/g, meta.text())
 res.write(indexHTML.head)
})

这里只选择替换 title 和 description, 如果还需要其他的, 自行添加正则

注意: 请保证模版中包含

<title>xxxx</title>


<meta name="description" content="xxxx">

修改路由组件

在路由组件添加

export default {
 name: 'frontend-index',
 prefetch: fetchInitialData,
 // 添加以下代码
 metaInfo () {
 const title = 'M.M.F 小屋 - 首页'
 return {
  title,
  meta: [{ vmid: 'description', name: 'description', content: title }]
 }
 }
}

或者这样

export default {
 name: 'frontend-article',
 prefetch: fetchInitialData,
 // 添加以下代码
 metaInfo () {
 const title = this.article.title
 return {
  title: title + ' - M.M.F 小屋',
  meta: [{ vmid: 'description', name: 'description', content: title + ' M.M.F 小屋' }]
 }
 }
}

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

Javascript 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
javascript 设计模式之单体模式 面向对象学习基础
Apr 18 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 Javascript
鼠标滚轴控制文本框值的JS代码
Nov 19 Javascript
JavaScript验证电子邮箱的函数
Aug 22 Javascript
JQuery记住用户名密码实现下次自动登录功能
Apr 27 Javascript
JS中生成随机数的用法及相关函数
Jan 09 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
Aug 25 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 Javascript
详解vue+css3做交互特效的方法
Nov 20 #Javascript
解读ES6中class关键字
Nov 20 #Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 #Javascript
Node.js 中使用 async 函数的方法
Nov 20 #Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 #Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
Nov 19 #Javascript
使用DataTable插件实现异步加载数据
Nov 19 #Javascript
You might like
PHP中的日期处理方法集锦
2007/01/02 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php类的定义与继承用法实例
2015/07/07 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
Python 正则表达式的高级用法
2016/12/04 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
Pycharm Git 设置方法
2020/09/15 Python
python 数据类型强制转换的总结
2021/01/25 Python
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
学生偷窃检讨书
2014/09/25 职场文书
2014年采购员工作总结
2014/11/18 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
MySQL数据库之存储过程 procedure
2022/06/16 MySQL