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 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
Pro JavaScript Techniques学习笔记
Dec 28 Javascript
JavaScript中URL编码函数代码
Jan 11 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
Dec 11 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
详解动画插件wow.js的使用方法
Sep 13 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 Javascript
详解小程序退出页面时清除定时器
Apr 28 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
几种显示数据的方法的比较
2006/10/09 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
python实现2048小游戏
2015/03/30 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
如何基于python操作json文件获取内容
2019/12/24 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
千元咖啡店的创业计划书范文
2013/12/29 职场文书
出纳员的岗位职责
2014/02/22 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
会计岗位说明书
2014/07/29 职场文书
出售房屋协议书范本
2014/10/06 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis