middleware 是什么原理
发布于 9 年前 作者 yakczh 4977 次浏览 最后一次编辑是 8 年前 来自 问答

是不是相当于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 的管道.

回到顶部