通过nodejs来处理markdown

java9nodejs


发表于 2018-05-28 15:32


博客中的markdown转化,一直都是采用的 commonmark-java ,虽然方便,支持的也很好,但是还是js的支持更加的完善,于是想通过markdown-it来转化markdown。 首先是安装:

npm install markdown-it --save

安装完成之后启动:

node /path/to/app.js

app.js内容:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

var md = require('markdown-it')({
	html : true
});

const server = http.createServer((req, res) => {
  if(req.method == 'POST'){
	var body = '';
	req.on('data', function (data) {
		body += data;
	});
	req.on('end', function () {
		body = md.render(body,{});
		var json = JSON.stringify({ 
			success: true, 
			message: body
		});
		
		res.writeHead(200, {'Content-Type': 'application/json'});
		res.end(json);
	});
  }else{
	  
	  var json = JSON.stringify({ 
		success: false, 
		message: "post only"
	  });
	  
	  res.writeHead(200, {'Content-Type': 'application/json'});
	  res.end(json);
  }
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

最后就是通过java来传递、解析(终于有机会用一把java9带来的 jdk.incubator.httpclient 了),要想使用这玩意,首先要加载它对应的模块:

base64_1527492115281.png

这里面有个疑问,编译时会有警告:

WARNING: Using incubator modules: jdk.incubator.httpclient

这个issue 中提到,在jdk10中被替换为了 java.httpclient

In JDK 9, the module is called jdk.incubator.httpclient. This incubator module will be replaced by java.httpclient in JDK 10. JDK 10 might bring breaking changes to the API.

但是我本机通过 java --list-modules发现并没有他说的java.httpclient(java版本10.0.1)。不过好在这个警告并不会对接下来有什么影响,这里存疑吧。

通过jdk.incubator.httpclient来操作非常的方便,只需要以下几行代码:

HttpRequest request = HttpRequest.newBuilder().uri(new URI("http://localhost:3000")).POST(BodyPublisher.fromString("# hello")).build();
HttpResponse<String> str = HttpClient.newHttpClient().send(request, BodyHandler.asString());
System.out.println(str.body());

但在和nodejs的交互中,却爆出了如下异常:

java.io.EOFException: EOF reached while reading

https://stackoverflow.com/questions/50338384/java-10-httpclient-incubator-get-request-fails-on-node-js-server 这里有位老哥也碰到了同样的问题,但我发现通过指定 request的version可以避免这个问题,例如:

HttpRequest.newBuilder().uri(new URI("http://localhost:3000")).POST(BodyPublisher.fromString("hello")).version(Version.HTTP_1_1).build();

搜索