middleware 是什么原理
是不是相当于java的责任链?
2 回复
思路是把middle存起来,request来的时候然后链式调用,调用过程会判断是否符合路由逻辑;下面粗略写了一个,更详细的细节在Connect,以及加入正则的升级版ExpressRouter。。
var http = require('http');
var middlewares = [
function (req, res, next) {
req.session = {user: 'anonymos'};
next();
},
function (req, res, next) {
res.end(req.session.user);
}
//还能加很多,只要注意不要多次返回
]
function requestHandler(req, res) {
var i=0;
//由middlewares尾递归链式调用
function next(err) {
if (err) {
return res.end('error.', err.toString());
}
if (i<middlewares.length) {
middlewares[i++](req, res, next);
} else {
return ;
}
}
//触发第一个middleware
next();
}
var server = http.createServer(requestHandler);
server.listen(3000);
// http://localhost:3000
// anonymos
相当于 UNIX 的管道.