express中间件另类实现
发布于 7 年前 作者 guenchi 2312 次浏览 来自 分享

最近在造一个类似express的玩意 https://github.com/guenchi/Ballista

撸到中间件 去网上找了一下实现方式: 大致是这样:

function express() {

	var funcs = []; // 待执行的函数数组

	var app = function (req, res) {
    	var i = 0;

    	function next() {
        	var task = funcs[i++];  // 取出函数数组里的下一个函数
        	if (!task) {    // 如果函数不存在,return
            	return;
        	}
        	task(req, res, next);   // 否则,执行下一个函数
    	}

    	next();
	}

	app.use = function (task) {
    	funcs.push(task);
	}

	return app;    // 返回实例
}

然后自己没看清楚就半截跑了,撸出来是这样:

var funcs = []; 

app-use = function (task) {
    	funcs.push(task);
}

然后写了一个函数,来将中间件的队列展开成互相调用。 为了实现这一点 每个中间件需要返回一个需要一个回调函数的函数。(好绕口)

然后就是用next的名字包装了一下: var next = ( req , res ) => ( f ) => f( req , res );

中间件的写法: var middleware = ( req , res) =>{ if(<test>){ next( req , res); }else{ return res.send(403); } }

回到顶部