node.js实现浏览器预览markdown

接上一篇, 用 lynx 做浏览器太过简陋了!

何不用node.js搭建一个小型的web服务器,反正有现成的模块可用,几行代码的事

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

var imageDir='/home/peter/myblog1/source/images/'; //图片所在目录
var cssDir='/home/peter/nodehttp/'; //css 所在目录
var http = require('http');
var url=require('url');
var path=require('path');
var fs = require('fs');
var buff='';
//var buff = fs.readFileSync('./aa.html');
process.stdin.on('data',data=>{
buff=data;
});

server = http.createServer(function(request,response){
pathName = url.parse(request.url).pathname;
dirName=path.dirname(pathName);
baseName=path.basename(pathName);
extName=path.extname(pathName);
if((dirName==='/') && (baseName==='')){
response.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'});
response.end(buff);
}
else if((dirName==='/images')&&((extName==='.jpg')||(extName==='.png')||(extName==='.webp'))){
fs.readFile(imageDir+baseName,function(err,data){
if(err){
response.writeHead(404);
response.end();
}
else
{
response.writeHead(200,{'Content-Type':'image/'+extName.substring(1)});
response.end(data);
}
});
}
else if((dirName==='/')&&(extName==='.css')){
fs.readFile(cssDir+baseName,function(err,data){
if(err){
response.writeHead(404);
response.end();
}
else
{
response.writeHead(200,{'Content-Type':'text/css'});
response.end(data);
}
});
}
else{
response.writeHead(404);
response.end();
}
});

server.listen(8888);

console.log('Listening at loacalhost:8888');

然后使用命令

1
pandoc aa.md -f markdown -t html  --standalone  --css markdown.css|node ~/nodehttp/nodehttp.js

浏览器打开: http://localhost:8888 就可看到结果

使用环境为windows & wsl, css参照网上的实例,代码段还有点问题。