express的中间件简单实现
在使用express时,中间件是必须使用的,有时候需要自己写一个中间件,express是如何实现中间件的呢,下面一个简单的实现demo。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| var http = require('http');
function express() {
var funcs = []; // 待执行的中间件数组
var app = function (req, res) { var i = 0;
function next() { var task = funcs[i++]; // 取出中间件数组里的下一个函数 if (!task) { // 如果函数不存在,return return void 0; } task(req, res, next); // 否则,执行下一个函数 }
next(); }
// 使用中间件函数 app.use = function (task) { funcs.push(task); }
return app; // 返回实例 }
// 下面是测试case
var app = express(); http.createServer(app).listen('3000', function () { console.log('listening 3000....'); });
function middlewareA(req, res, next) { console.log('middlewareA before next()'); next(); console.log('middlewareA after next()'); }
function middlewareB(req, res, next) { console.log('middlewareB before next()'); next(); console.log('middlewareB after next()'); }
function middlewareC(req, res, next) { console.log('middlewareC before next()'); next(); console.log('middlewareC after next()'); }
app.use(middlewareA); app.use(middlewareB); app.use(middlewareC);
|