我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

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

苏南大叔:利用html-minifier制作thinkjs中间件,压缩html文本输出 - thinkjs-compress-html
利用html-minifier制作thinkjs中间件,压缩html文本输出(图4-1)

本文中,苏南大叔将要把这个功能需求,移植到thinkjs框架内。

效果展示

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

苏南大叔:利用html-minifier制作thinkjs中间件,压缩html文本输出 - 001
利用html-minifier制作thinkjs中间件,压缩html文本输出(图4-2)

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制作thinkjs中间件,压缩html文本输出(图4-3)

额外信息

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

sudo npm install html-minifier --save

苏南大叔:利用html-minifier制作thinkjs中间件,压缩html文本输出 - 000
利用html-minifier制作thinkjs中间件,压缩html文本输出(图4-4)

结论

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

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

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   thinkjs    middleware