Vuejs中使用markdown服务器端渲染的示例


Posted in Javascript onNovember 22, 2017

啊哈,又是来推荐一个 vuejs 的 package,miaolz123/vue-markdown。 对应的应用场景是:你想使用一个编辑器或者是在评论系统中支持 markdown。这个 package 的有点还是挺多了,比如默认就支持 emoji,这个就很完美啦!laravist 的新版就使用了 vue-markdown 来渲染评论。

安装

直接使用 npm 来安装:

npm install --save vue-markdown

使用

也是很简单的,可以直接这样:

import VueMarkdown from 'vue-markdown'

new Vue({
 components: {
  VueMarkdown
 }
})

或者是这样,举一个具象化的例子是:比如我们有一个 Comment.vue 组件用来渲染评论,可以在这个组件中直接指明:

import VueMarkdown from 'vue-markdown';
<template>
 <div>
  <vue-markdown :source="comment.body"></vue-markdown>
 </div>
</template>

export default { // ... other codes
 props:['comment'],
 data(){  
  return {
   comment : this.comment
  }
 }, 
 components: {
  VueMarkdown
 }, 
// ... other codes
}

然后在渲染的时候这个:

<div class="comments">
 <div class="comments" v-for="comment in comments">
  <comment :comment="comment">
  </comment>
 </div>
</div>

这里我们首先通过 comment props 传入整个 comment(这个comment其实就是一个对象) ,然后在 Comment.vue 通过 :source 来给 veu-markdown 组件传入每个评论的 body 字段内容,注意这里的 comment.body 在数据库中保存的就是评论的 markdown 格式的内容。

Vuejs服务器端渲染markdown示例

const Koa = require('koa');
const _ = require('koa-route');
const vsr = require('vue-server-renderer');
const fs = require('fs');
const indexjs = require('./component/index.js');
const Vue = require('vue');
const MD = require('markdown-it')

const server = new Koa();

const route = {
  index: (ctx, id) => {
    // 解析markdown
    const md = new MD().render(fs.readFileSync('./markdown/' + id + '.md', 'utf-8'));
    // vue插入html代码
    const app = new Vue({
      data: {
        main: md
      },
      template: `
      <div>
        <div class="main" v-html="main"></div>
      </div>`
    });
    // 其他变量设置
    const context = {
      htmlTitle: id
    };
    // 加载模板html文件
    const renderer = vsr.createRenderer({
      template: fs.readFileSync('./template/index.template.html', 'utf-8')
    });
    // 渲染
    renderer.renderToString(app, context, (err, html) => {
      if (err) {
        ctx.response.status = 500;
      } else {
        ctx.response.body = html;
      }
    })
  }
};

server.use(_.get('/post/:id', route.index));
server.listen(8080);
<!DOCTYPE html>
<html lang="CH-ZN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>{{htmlTitle}}</title>
</head>

<body>
  <!--vue-ssr-outlet-->
</body>

</html>

总结

本文介绍的 vue-markdown 在某些应用场景中其实超级好用,特别是对于评论系统想支持 markdown 这个需求来说,容易集成,优点多多。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
jquery操作select方法汇总
Feb 05 Javascript
Java File类的常用方法总结
Mar 18 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
jQuery.trim() 函数及trim()用法详解
Oct 26 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
vue.js中$set与数组更新方法
Mar 08 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
浅谈Vue-cli 命令行工具分析
Nov 22 #Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 #Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 #Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 #Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
Nov 22 #Javascript
基于JavaScript实现表格滚动分页
Nov 22 #Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 #Javascript
You might like
Smarty模板快速入门
2007/01/04 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
经验几则 推荐
2006/09/05 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
javascript模拟命名空间
2015/04/17 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python采集腾讯新闻实例
2014/07/10 Python
Python性能优化技巧
2015/03/09 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
python requests post多层字典的方法
2018/12/27 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
劳动实践课感言
2014/02/01 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
外国人来华邀请函
2015/01/31 职场文书
工程资料员岗位职责
2015/04/13 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python