利用html-minifier制作thinkjs中间件,压缩html文本输出
发布于 作者:苏南大叔 来源:程序如此灵动~
本文中,苏南大叔将结合thinkjs的相关middleware文章,做一个具体的任务需求。需求的内容,就是压缩html文本输出。在前面的文章中,苏南大叔曾经利用php的tidy
和smarty
做了相同的事情。
本文中,苏南大叔将要把这个功能需求,移植到thinkjs框架内。
效果展示
因为这个需求似乎很难听懂发生了什么,所以这里先做个效果展示:
html输出的文本进行了压缩,去除了多余的回车换行空格等等。
代码展示
src/middleware/mini.js
:
//sunan
module.exports = (options, app) => {
return async (ctx, next) => {
await next();
let body = ctx.body;
if (body && think.isString(body)) {
//body = body.replace(/\s+/g, ' ');
body = require('html-minifier').minify(body, {
minifyCSS:true,
minifyJS:true,
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeEmptyAttributes: true
});
ctx.body = body;
}
}
};
src/config/middleware.js
:
//......
module.exports = [
{
handle: 'mini',
},
//......
]
这本例子中,mini
这个中间件需要放置到配置项目的第一个位置,但是这并不意味着他是第一个执行的。或者这样描述似乎更合适:它是第一个执行的中间件,但是确是最后一个执行完毕的中间件。只是因为一句话:await next()
。关于await
和sync
的内容,请关注苏南大叔的后续文章。
额外信息
这里的html-minifier
是第三方组件,所以,需要安装一下。
sudo npm install html-minifier --save
结论
本文以倒序的方式,描述了苏南大叔的第一个基于thinkjs的中间件demo。其中主体思路,是thinkjs作者welefen提供的。苏南大叔的思路下,没有考虑到await next()
的问题,在middleware的99%位置,通过ctx.body
获取到的都是undefined
。这个就是主要的问题所在了。
好,更多thinkjs的精彩内容,请继续关注苏南大叔的后续文章。https://newsn.net/tag/thinkjs/ 。


