function render(){
//获取标签
getTags();
//开始组合每个标签中的内容,然后将文本变成可执行的js
allTags=allTags.map((e,i)=>{
let str = let tmpl=''\r\n;
str += 'tmpl+=\r\n';
str += e
//先替换赋值标签
str = str.replace(/<%=([\s\S]*?)%>/ig,function () {
return '${'+arguments[1]+'}'
})
//再替换函数方法,记得别忘了首位的""这个闭合标签
str = str.replace(/<%([\s\S]*?)%>/ig,function () {
return '\r\n'+arguments[1] +"\r\ntmpl+="
})
str += '`\r\n return tmpl';
}
## STEP + 如果想用异步的方式读取文件,我推荐: 将`readFile`变成一个`Promise`,然后放入中间件中`await`一下,这样就可以实现异步了~ 如果不了解async/await,[科普传送门](https://juejin.im/post/5b851e136fb9a019f47d1d4b)。const util=require("util")
const fs=require("fs")
const path=require("path")
let readFile=util.promisify(fs.readFile)
function view(p,data){
let tpl="";
let allTags=[];
function getTags(){
//略
}
function render(){
//略
}
return async (ctx,next)=>{
tpl = await readFile(path.join(__dirname,p),"utf-8")
//别忘了运行render(),替换模板标签
render();
ctx.body=tpl;
await next();
}
}
```