首页 > 编程语言 >学习 node.js 六 Markdown 转为 html,zlib

学习 node.js 六 Markdown 转为 html,zlib

时间:2024-08-20 16:22:13浏览次数:14  
标签:node Markdown const HTML require zlib fs ejs

目录

Markdown 转为 html

安装

ejs语法

标签含义

 1. 纯文本标签

2. 输出经过 HTML 转义的内容

3. 输出非转义的内容(原始内容)

marked

browserSync

zlib

gzip

deflate

gzip 和 deflate 区别

http请求压缩 


Markdown 转为 html

什么是markdown?

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。

实现该功能需要的三个库:

1. ejs  一款强大的JavaScript模板引擎,它可以帮助我们在HTML中嵌入动态内容。使用EJS,您可以轻松地将Markdown转换为美观的HTML页面。

2. marked 一个流行的Markdown解析器和编译器,它可以将Markdown语法转换为HTML标记。Marked是一个功能强大且易于使用的库,它为您提供了丰富的选项和扩展功能,以满足各种转换需求。

3. browserSync 一个强大的开发工具,它可以帮助您实时预览和同步您的网页更改。当您对Markdown文件进行编辑并将其转换为HTML时,BrowserSync可以自动刷新您的浏览器,使您能够即时查看转换后的结果。

安装

npm i ejs marked browser-sync

ejs语法

详情请参照官方文档:EJS -- 嵌入式 JavaScript 模板引擎 | EJS 中文文档 (bootcss.com)

标签含义
  • <% '脚本' 标签,用于流程控制,无输出。
  • <%_ 删除其前面的空格符
  • <%= 输出数据到模板(输出是转义 HTML 标签)
  • <%- 输出非转义的数据到模板
  • <%# 注释标签,不执行、不输出内容
  • <%% 输出字符串 '<%'
  • %> 一般结束标签
  • -%> 删除紧随其后的换行符
  • _%> 将结束标签后面的空格符删除
 1. 纯文本标签

<% code %>

里面可以写任意的 js,用于流程控制,无任何输出。(在页面上没有内容)

例如:

<% alert('hello world') %> // 会执行弹框

2. 输出经过 HTML 转义的内容

<%= value %> 可以是变量
<%= a ? b : c %> 也可以是表达式

什么是 输出经过 HTML 转义的内容呢?即变量如果包含 ‘<’、‘>’、'&'等HTML字符,会被转义成字符实体,像&lt; &gt; &amp;因此用<%=,最好保证里面内容不要有HTML字符

const text = '<p>你好你好</p>'
<h2><%= text %></h2> // 输出 &lt;p&gt;你好你好&lt;/p&gt; 插入 <h2> 标签中
3. 输出非转义的内容(原始内容)

<%- 富文本数据 %> 通常用于输出富文本,即 HTML内容
上面说到<%=会转义HTML字符,那如果我们就是想输出一段HTML怎么办呢?

<%-不会解析HTML标签,也不会将字符转义后输出。像下例,就会直接把 <p>我来啦</p> 插入

const content = '<p>标签</p>'
<h2><%- content %></h2>

以上三个就是我们这次案例需要用的内容,如果想学习更对api,请浏览官方文档

template.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%= title %>></title>
</head>
<body>
    <%- content %>
</body>
</html>

marked

将md转换为html

const marked = require('marked');
const fs = require('fs');
const ejs = require('ejs');
const mdFile = fs.readFileSync("./typescript.md",{
    encoding: "utf8",
    flag: "r"
});
const htmlMd = marked.parse(mdFile)
function init() {
    ejs.renderFile("./template.ejs",{
        title: "md to html",
        content: htmlMd
    },(err, data) => {
        if(err) throw err;
        fs.writeFileSync("./typescript.html", data, {
            encoding: "utf8",
            flag: "w"
        })
    })
}
init()

这样就基本实现了md文件转为html

但是,还是需要手动打开,且不能热加载更新需要使用browserSync

browserSync

const marked = require('marked');
const fs = require('fs');
const ejs = require('ejs');
const browserSync = require('browser-sync');
function openBrowser() {
    const bs = browserSync.create();
    bs.init({
      server: {
          baseDir: "./",
          index: "typescript.html"
      }
    })
    return bs
}
function init() {
    const mdFile = fs.readFileSync("./typescript.md",{
        encoding: "utf8",
        flag: "r"
    });
    const htmlMd = marked.parse(mdFile)
    ejs.renderFile("./template.ejs",{
        title: "md to html",
        content: htmlMd
    },(err, data) => {
        if(err) throw err;
        let writeStream = fs.createWriteStream("./typescript.html");
        writeStream.write(data);
        writeStream.end();
        writeStream.on('finish', () => {
            openBrowser()
        })
    })
}
init()

采用写入流的方式,是因为写入流可以监听写入完成的事件

zlib

在 Node.js 中,zlib 模块提供了对数据压缩和解压缩的功能,以便在应用程序中减少数据的传输大小和提高性能。该模块支持多种压缩算法,包括 Deflate、Gzip 和 Raw Deflate。

zlib 模块的主要作用

1. 数据的压缩解压缩

2. 流压缩:zlib 模块支持使用流(Stream)的方式进行数据的压缩和解压缩。这种方式使得可以对大型文件或网络数据流进行逐步处理,而不需要将整个数据加载到内存中

3. 压缩格式支持:zlib 模块支持多种常见的压缩格式,如 Gzip 和 Deflate。这些格式在各种应用场景中广泛使用,例如 HTTP 响应的内容编码、文件压缩和解压缩等

案例:

gzip

使用gzip压缩文件

const zlib  = require('zlib');
const fs = require('fs');

// 使用gzip压缩
const readStream = fs.createReadStream('index.txt');
const writeStream = fs.createWriteStream('index.txt.gz');
readStream.pipe(zlib.createGzip()).pipe(writeStream);

使用gizp的方式解压文件

const zlib  = require('zlib');
const fs = require('fs');

// 使用gzip解压缩
const readStream = fs.createReadStream('index.txt.gz');
const writeStream = fs.createWriteStream('index2.txt');
readStream.pipe(zlib.createGunzip()).pipe(writeStream);

deflate

使用deflate压缩文件

const zlib  = require('zlib');
const fs = require('fs');

// 采用default压缩文件
const readStream = fs.createReadStream('index.txt');
const writeStream = fs.createWriteStream('index.txt.default');
readStream.pipe(zlib.createDeflate()).pipe(writeStream);

使用deflate解压文件

const zlib  = require('zlib');
const fs = require('fs');

// 采用default压缩文件
const readStream = fs.createReadStream('index.txt.default');
const writeStream = fs.createWriteStream('index2.txt');
readStream.pipe(zlib.createInflate()).pipe(writeStream);

gzip 和 deflate 区别

  1. 压缩算法:Gzip 使用的是 Deflate 压缩算法,该算法结合了 LZ77 算法和哈夫曼编码。LZ77 算法用于数据的重复字符串的替换和引用,而哈夫曼编码用于进一步压缩数据。
  2. 压缩效率:Gzip 压缩通常具有更高的压缩率,因为它使用了哈夫曼编码来进一步压缩数据。哈夫曼编码根据字符的出现频率,将较常见的字符用较短的编码表示,从而减小数据的大小。
  3. 压缩速度:相比于仅使用 Deflate 的方式,Gzip 压缩需要更多的计算和处理时间,因为它还要进行哈夫曼编码的步骤。因此,在压缩速度方面,Deflate 可能比 Gzip 更快。
  4. 应用场景:Gzip 压缩常用于文件压缩、网络传输和 HTTP 响应的内容编码。它广泛应用于 Web 服务器和浏览器之间的数据传输,以减小文件大小和提高网络传输效率。

http请求压缩 

const zlib  = require('zlib');
const http = require('http');

const server = http.createServer((req, res) => {
    let str = 'hello world'.repeat(1000);
    res.setHeader('Content-Encoding', 'gzip');
    res.setHeader('Content-Type', 'text/plain;charset=utf8');
    str = zlib.gzipSync(str);
    res.end(str);
})

server.listen(3000, () => {
    console.log('server is running on port 3000');
})

压缩前

压缩后

 

标签:node,Markdown,const,HTML,require,zlib,fs,ejs
From: https://blog.csdn.net/tian_liang_jia/article/details/141344229

相关文章

  • C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩
    今天在对接一个三方接口时,需要传一个附件数据,附件需要使用Deflate压缩算法压缩后的文件二进制流,再进行base64编码后的字符串。刚开始使用的官方自带的System.IO.Compression.DeflateStream方式,结果不管怎么改变CompressionLevel级别,压缩结果始终和java的压缩结果不一致,结果不一致......
  • 基于nodejs+vue协同过滤算法的商品推荐系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为人们日常生活中不可或缺的一部分。然而,面对海量的商品信息和日益增长的消费者需求,用户往往难以快速找到符合自己兴......
  • 基于nodejs+vue协同过滤算法的体育用品推荐系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的蓬勃发展和体育文化的日益普及,体育用品市场迎来了前所未有的发展机遇。然而,面对市场上琳琅满目的体育用品和消费者日益增长的个性化需求,如......
  • 基于nodejs+vue协同过滤算法的电影推荐系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的普及和视频流媒体服务的兴起,电影作为大众娱乐的重要组成部分,其数量正以惊人的速度增长。面对浩如烟海的电影资源,用户往往难以快速找到符合自己......
  • 基于nodejs+vue协同过滤的高考志愿推荐系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着教育改革的深入和高等教育普及率的提升,高考作为人生的重要转折点,其志愿填报过程日益受到考生及家长的重视。然而,面对众多高校和复杂的专业设置,如何科学......
  • lit ace markdown编辑器
    src/components/AcrMarkdown.ts:import{LitElement,css,html}from"lit";import{customElement,property,query}from"lit/decorators.js";importacefrom"ace-builds/src-min-noconflict/ace.js";import{marked}from&q......
  • Node.js 的 http模块
    http模块http模块是一个内置模块,它提供了HTTP服务器的功能。使用这个模块,你可以创建一个HTTP服务器来响应客户端的请求,http模块是Node.js中进行HTTP通信的基础,无论是作为服务器还是客户端。常用的服务器软件还有:Apache,IIS,Nginx,Tomcathttp模块的一些基本用法创建服......
  • Nodejs 的 fs 模块
    文件读写fs模块(文件系统模块)提供了一个用于读写文件的API。它是Node.js核心模块之一,允许你以异步或同步的方式对文件进行操作。读取异步读取文件,当文件读取完成时,调用回调函数。fs.readFile(path[,options],callback)同步读取文件,返回文件内容fs.readFileSync(path[,o......
  • Markdown丝滑体验——搭建图床
    Markdown丝滑体验——搭建图床在多个平台发布markdown时,时常要带着图片跑这跑那,十分麻烦。为了解决这个问题,得到更丝滑的体验,我们可以搭建自己图床。参考教程四分钟教你搭建高速免费稳定图床,Gitee+PicGo完美搭配,获得Markdown写作丝滑体验!_哔哩哔哩_bilibiliGitee创建图......
  • Markdown语法
    Markdown语法参考8分钟让你快速掌握Markdown_哔哩哔哩_bilibiliMarkdown基本语法|Markdown官方教程标题#标题一##标题二###标题三####标题四#####标题五######标题六快捷键CTRL+数字引用>这是一段引用这是一段引用列表有序列表1.one2......