如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种形式采集行为。请尊重原创文章内容,转载请保留链接信息。

本文中,苏南大叔将结合thinkjs的相关middleware文章,做一个具体的任务需求。需求的内容,就是压缩html文本输出。在前面的文章中,苏南大叔曾经利用php的tidysmarty做了相同的事情。本文中,苏南大叔将要把这个功能需求,移植到thinkjs框架内。

效果展示

因为这个需求似乎很难听懂发生了什么,所以这里先做个效果展示:

利用html-minifier制作thinkjs中间件,压缩html文本输出 - 001

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()。关于awaitsync的内容,请关注苏南大叔的后续文章。

利用html-minifier制作thinkjs中间件,压缩html文本输出 - 002

额外信息

这里的html-minifier是第三方组件,所以,需要安装一下。

sudo npm install html-minifier --save

利用html-minifier制作thinkjs中间件,压缩html文本输出 - 000

结论

本文以倒序的方式,描述了苏南大叔的第一个基于thinkjs的中间件demo。其中主体思路,是thinkjs作者welefen提供的。苏南大叔的思路下,没有考虑到await next()的问题,在middleware的99%位置,通过ctx.body获取到的都是undefined。这个就是主要的问题所在了。

好,更多thinkjs的精彩内容,请继续关注苏南大叔的后续文章。https://newsn.net/tag/thinkjs/

尊重原创内容,转载请保留链接信息,感谢您的阅读。
模拟人工批量抓取盗版行为,保留版权法律诉讼权利。

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/thinkjs-middleware-html-minifier.html
上一篇好文:如何新建一个thinkjs的middleware
下一篇好文:利用htmltidy编写thinkjs中间件,格式化html代码输出

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。
如果本文对您有帮助,或者节约了您的时间,欢迎您打赏瓶饮料,建立一下友谊关系。
想要获取完整源码或相关软件?点击这里获取相关内容