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

本文中,苏南大叔将结合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/

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。