express中间件另类实现
最近在造一个类似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); } }