js中间件的思维

在原生nodejs中,在监听响应的时候我们需要不断的去判断url,来响应不同的处理方式,这就会造成代码的很难去维护,

在express总就采用了中键的设计角度去思考,其中利用了next递归方式去调用,而this.cache相当于代理作用保存了所有中间键的方法.设计非常巧妙

function Middle(){
      this.cache=[];
  }
  Middle.prototype.use=function(fn){
      if(typeof fn!="function"){
          console.error("你传入的不是一个方法")
      }
      this.cache.push(fn);
  }
  Middle.prototype.next=function(){
    if(this.middles.length==0||!this.middles){
        return
    }
    var fn=this.middles.shift();
    fn.call(this,this.next.bind(this));
  }
  Middle.prototype.commit=function(){
      this.middles=this.cache.slice();
      this.next()
  }
  var middle=new Middle();
  middle.use(function(next){
    console.log(1);  
    next();
  })
  middle.use(function(next){
    console.log(2);  
    next();
  })
  middle.use(function(next){
    console.log(3);
  })
  middle.use(function(next){
    console.log(4);  
    next();
  })
  middle.commit()
  middle.commit()

 

posted @ 2019-07-13 09:24  阿法狗的世界  阅读(248)  评论(0编辑  收藏  举报