CNode

middleware 是什么原理

问答
Yyakczh发布于11 年前最后回复11 年前2 回复5450 浏览0 收藏

是不是相当于java的责任链?

查看回复

回复 (2)

A
albin3#1·11 年前

思路是把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
T
TossShinHwa#2·11 年前

相当于 UNIX 的管道.

参与回复
登录后即可参与回复。登录