node.js异步模版ariestp

有2月没写博客,最近工作比较忙,打算花点时间补一下这2个月的工作心得,先开源一个node.js的异步模版,具体这个模版和其他模版有什么区别呢?

线上开源项目地址:
https://github.com/DoubleSpout/ariestp

其实这个模版实现的功能很简单,可以把一些异步操作,放在模版里去执行,举个简单的例子如下:

“use strict”;
const aries = require(“ariestp”);
const fs = require(“fs”);
const http = require(“http”);

const asyncTpl = `<%?
ctx.thinking;
setTimeout(function () {
ctx.thinking = “1 seconde later”
aries();
}, 1000);

%>
<%- ctx.thinking %>

<%?
ctx.http.get('http://www.baidu.com/', (res) => {
    ctx.status =  res.statusCode;
    res.resume();
    aries();
}).on('error', (e) => {
  ctx.status = 500;
  aries();
});
%>
<%- ctx.status %>
`;

aries.compile(asyncTpl, {http:http}, (err, renderStr, isUseCache) => {
if(err) return console.log(err);
console.log(renderStr);
});

模板语言和 ejs 类似,不过多了一个 <%? … %> 这样的异步流程控制,在异步流程结束后,记得需要调用一下 aries(); 表示异步结束,继续执行模板解析。

上述代码执行结果如下:
1、模版将等待1秒钟后输出 “1 second later”
2、然后模版将请求 www.baidu.com 然后将百度的返回的status打印出来,不出以外就是打印”200”

至于为什么要做这样一个可以在模板里执行异步操作的模板引擎呢?也是公司项目的特殊需要,想要做到就是不发布代码,直接可以修改页面的展示,至于模板性能肯定是不如同步的 ejs 的,做过简单的压测,大约是ejs性能的70%左右。