专栏首页大史住在大前端express中间件系统的基本实现

express中间件系统的基本实现

一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品。今天就来实现一个简易的【中间件队列】。

一. API层

  • 初始化方法 let middleware = new MiddleWare();
  • 添加中间件函数的方法 //Fn为被添加的中间件 middleware.use(Fn);
  • 启动中间件队列 middleware.start(req, res);

二. 核心类的定义

class MiddleWare{
    constructor(){
        this.queue = [];//用来存放中间件队列
    }
    
    //添加中间件
    use(fn){
         this.queue.push(fn);//将自定义中间件加入队列
    }
    
    //按次序执行中间件
    start(req, res){
        let i = 0;//执行指针
        
        //执行器
        const next = (err)=>{
            //如果有错误就将错误信息挂在response上并直接退出
            if(err){
                res.hasError = true;
                res.data = err.toString();
                return;
            }
            
            //如果没有错误就查看是否到达队尾,若没到则继续执行下一个中间件
            if(i < this.queue.length){
                this.queue[i++](req, res, next);
                /*将next直接传入当前执行的函数作为回调
                 当前执行函数执行到任何一步,通过主动调用next方法即可将相关信息传给下一个中间件。*/
            }else{
                //如果已经到队尾了则结束
                console.log('finish');
            }
            
        }
        //启动第一个
        next();
    }
}

三. 使用use方法添加中间件

//添加第一个中间件
/*
此处演示了一个基本的错误捕捉的写法,当中间件中出现错误时,会捕捉到错误并传入next
*/
middleware.use(function(req, res, next){
    try{
       req.addon1 = 'I add something';  
    }catch(err){
       next(err);
    }
    next();
});

//添加第二个中间件
middleware.use(function(req, res, next){
     res.addon2 = 'I add something more';
     next();
});

//添加第三个中间件
middleware.use(function(req, res, next){
     if (req.addon2) {
       delete req.addon2;
     }
     res.addon3 = 'I add something a lot';
     next();
});

四. 消费定义的类

“消费”这个词是最近学到的,觉得很装X,所以也在这里装一下~

let req = {};
let res = {};
let result = middleware.start(req,res);
console.log(req, res);

五. 查看运行结果

可以看到有错误发生和正常响应时的不同结果:

六. 在服务器端运行

node起一个web服务器那真是太随意了~

const http = require('http');
//上面的一堆代码
http.createServer(function(req, res){
    let result = {};
    middleware.start(req, result);
    res.end(JSON.stringify(result));
}).listen(9527);

看一下效果(访问服务器时自定义消息就可以传至前台了):

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • KOA中间件的基本运作原理

    在中间件系统的实现上,KOA中间件通过async/await来在不同中间件之间交换控制权,工作机制和栈结构非常相似,建议结合《express中间件系统的基本实现...

    大史不说话
  • javascript基础修炼(9)——MVVM中双向数据绑定的基本原理

    MVVM模型是前端单页面应用中非常重要的模型之一,也是Single Page Application的底层思想,如果你也因为自己学习的速度拼不过开发框架版本迭代...

    大史不说话
  • 【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上)

    通读完上一篇博文中提及的教程,觉得应该搞个大作业巩固一下所学的知识,想起刚上映的漫威宇宙第三阶段收官之作《蜘蛛侠·英雄远征》,于是决定仿一个MARVEL的片头动...

    大史不说话
  • Express中间件,看这篇文章就够了(#^.^#)

    底层:http模块 express目前是最流行的基于Node.js的web开发框架,express框架建立在内置的http模块上, var http = req...

    okaychen
  • Express 介绍

    根据官方的介绍,Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,可以轻松的创建各种 web 或者移动端应用

    前端博客 : alili.tech
  • Node JS 中间件如何工作?

    你需要安装一些东西来创建、使用和测试 Express 中间件。首先需要 Node 和 NPM。为确保已经安装,可以运行:

    疯狂的技术宅
  • 算法(四)(转载)KMP算法

    字符串匹配是一个既古老又现代的问题,历久弥新。生信领域中字符串处理更是daily work。诸如bwa这般神一样的软件,本质上也是在解决字符串非精准匹配的问题。...

    一只羊
  • k8s master机器文件系统故障的一次恢复过程

    研发反馈他们那边一套集群有台master文件系统损坏无法开机,他们是三台openstack上的虚机,是虚拟化宿主机故障导致的虚机文件系统损坏。三台机器是mast...

    程序猿Damon
  • e租宝都被查了,P2P还安全吗?

    有关e租宝公司被调查的新闻在微博、朋友圈被引爆刷屏,700多亿成交资金“打了水漂”,P2P再次成为金融业甚至经济领域的热门话题。许多人看中P2P理财的高收益,却...

    FB客服
  • 数据结构 | 每日一练(108)

    ——老子

    闫小林

扫码关注云+社区

领取腾讯云代金券