node.js 文件服务器————在线markdown转html

转换工具

markdown转换使用python的markdown库
配置python环境,并安装markdown转换库

$ pip install markdown

编写python脚本

import sys
import markdown
import codecs
from markdown import extensions
# from markdown.treeprocessors import Treeprocessor



def main(argv):
	print("收到的参数 === %s" %(argv))
	name = argv[0]	

	in_file = 'Markdown/%s.md' % (name)
	out_file = 'HTML/%s.html' % (name)

	input_file = codecs.open(in_file, mode="r", encoding="utf-8")

	text = input_file.read()

	html = markdown.markdown(text,extensions=['markdown.extensions.toc','markdown.extensions.fenced_code','markdown.extensions.tables'])
	# 保存文件
	output_file = codecs.open(out_file, mode="w", encoding="utf-8")
	output_file.write(html)


if __name__ == "__main__":
   main(sys.argv[1:])

  • 为什么用python来做转换?
    1.好用的js库都是jquery的,我。。。
    2.其它非jq的转换库三条不会和大多数网站一样生成带pre标签的html

  • 所以,我就找我朋友帮我写了一个python的转换工具,别说,害挺好用的 ~

后台文件服务

  • 我实现的思路是,将前端提交的markdown字符串提交到web服务,再由web服务对其关键信息进行加密后,提交到文件服务,并在文件服务中生成.md文件,生成后转成html文件存储在文件服务器中相应的位置
  • 我是用自己电脑做的文件服务器,为了图省事,就把文件夹放在桌面上了
  • 最后那个files就是文件存储路径 /Users/musoul/Desktop/files

  • 文件夹内部结构如下
  • 生成的markdown文件会出现在Markdown文件夹中,转换完成的html文件,会放在HTML文件夹中

文件服务代码部分

  • 项目文件结构
    在这里插入图片描述
  • router文件夹下的文件,用来做路由中间件,controller文件夹下的文件,用来处理接口请求

Home

  • fileServer.js文件,用于创建web服务,以及接口的统一响应
const fileServer = require('express')()
const process = require('process');
const router = require('./router/index')

router(fileServer)

fileServer.all('*', (req, res, next) => {
  // 所有的接口都可以访问
  res.header('Access-Control-Allow-Origin', '*');//自定义中间件,设置跨域需要的响应头。
  res.header('Access-Control-Allow-Headers', '*');//自定义中间件,设置跨域需要的响应头。
  next()
})

fileServer.listen('8888', () => {
  // 进入文件摆放路径
  process.chdir('/Users/musoul/Desktop/files')
  // cwd()获取node执行命令行时的路径
  console.log(process.cwd())
})

router中间件

  • index.js
const fileManager = require('./fileManager')

module.exports = function(fileServer) {
   fileServer.use('/fileManager', fileManager)
}
  • fileManager.js
const router = require('express').Router()
const fileManager = require('../controller/fileManager')

router.post('/writeToFile', fileManager.writeToFile)

module.exports = router

controller层

  • fileManager.js
const fs = require('fs')
const childProcess = require('child_process')

class fileManager {
    constructor(){}

    writeToFile(req, res) {
        const file_name = req.query.filename
        const file_content = req.query.content
        const cwd_path = process.cwd()
        console.log(`${cwd_path}/${file_name}.md`)
        fs.writeFile(`${cwd_path}/Markdown/${file_name}.md`, file_content, (err) => {
            if (err) {
                console.log(err)
                return
            }
            var cmd = `python MarkdownToHTML.py ${file_name}`
            childProcess.exec(cmd, (err, stdout, stderr) => {
                if (err) {
                    console.log('error  : ' + err)
                    return
                }
                console.log('stuout : ' + stdout)
                console.log('stderr : ' + stderr)
            })
            var resData = {'res_code': 1, 'msg': 'markdown文件已转换成HTML文件', 'data': {}}
            res.send(200, resData)
            res.end()
            return
        })
    }
}

module.exports = new fileManager()

效果展示

  • 下面就是postman请求的返回在这里插入图片描述
  • 生成的markdown文件在这里插入图片描述
  • 效果
    在这里插入图片描述
  • 转换成的html文件
    在这里插入图片描述
  • 效果
    在这里插入图片描述

最后

大家要是感兴趣的,可以去我的代码仓库下载一下,文件结构创建好就可以玩了,接口请求地址

method post

http://127.0.0.1:8888/fileManager/writeToFile

filename: 想要的文件名
content: markdown文本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值