简书md文档在线转化成html文档的能力一直是简书的一大特色,我也来试试如何制作一个只有核心功能(md转化为HTML)的“简书”
效果图
标题没有认真调整格式,但是其他部分看起来是不是和简书超级像呢?感兴趣的话就一起来和我完成属于自己的“简书吧”。
实现
实现原理是采用node.js搭建服务器,读取md文件转化为html片断。浏览器发送ajax请求获取片段后再渲染生成html网页。原理其实很简单呢,对不?准备好就开始动手吧。
搭建node.js服务器
var express = require('express');
var http = require('http');
var fs = require('fs');
var bodyParser = require('body-parser');
var marked = require('marked'); // 将md转化为html的js包
var app = express();
app.use(express.static('src')); //加载静态文件
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.get('/getMdFile',urlencodedParser, function(req, res) {
var data = fs.readFileSync('src/test.md', 'utf-8'); //读取本地的md文件
res.end(JSON.stringify({
body : marked(data)
}));
} );
//启动端口监听
var server = app.listen(8088, function () {
var host = server.address().address;
var port = server.address().port;
console.log("应用实例,访问地址为 http://%s:%s", host, port)
});
安装好依赖包,服务器就可以愉快地跑起来了~
HTML结构
重要的就是发送请求获取数据啦,把取到的数据填充到div中即可。
<div id="content">
<h1 class="title">md-to-HTML web app</h1>
<div id="article">
</div>
</div>
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script>
var article = document.getElementById('article');
$.ajax({
url: "/getMdFile", success: function(result) {
console.log('数据获取成功');
article.innerHTML = JSON.parse(result).body;
}, error: function (err) {
console.log(err);
article.innerHTML = '<p>获取数据失败</p>';
}
});
</script>
再根据简书的样式添加上CSS样式,一个小小的“简书”就实现了。
有兴趣的童鞋可以去github上下载源码,飞机票。