Get与Post方法请求——为框架增加新特性
首先,更改App的构造函数,增加两个处理函数的变量名,用于储存处理函数。
为框架增加新特性
首先,更改App的构造函数,增加两个处理函数的变量名,用于储存处理函数。
...... function App(){ var self = this; // DOTO , GET方法的处理函数 this._getHandle = null; // DOTO , POST方法的处理函数 this._postHandle = null; ......
接下来,为App原型增加两个方法,目的是设置GET方法与POST方法请求的处理函数。
...... App.prototype.get = function(handle){ this._getHandle = handle; } App.prototype.post = function(handle){ this._postHandle = handle; } ......
通过以上两步,还是无法真正起到作用,还需要修改App构造函数内部的handle函数。目的,是让中间件执行完成后,再执行GET或POST的处理函数。
下图演示了中间件和处理函数的顺序。
根据上图所示,需要在中间件依次执行后,进行个判断,看看request.method 是 POST还是GET 方法,最后调用对应的处理函数。下面是修改后的代码片段。
function App(){ ...... function handle(){ ...... // 执行插件函数 function execMiddle(){ var middle = middleList[middleIndex]; if(middle){ middle(req,res,next); }else{ // 判断是GET还是POST方法 switch(req.method){ case "GET": if(self._getHandle){ self._getHandle(req,res); } break; case "POST": if(self._postHandle){ self._postHandle(req,res); } break; } } } ...... } ...... }
另外,static.js中间件,还需要修改一下,因为必须让它调用next(),否则如果程序加入了static中间件,get和post方法的处理函数永远都不会被调用。而static中间件要在找不到静态资源的时候调用next(),比如/page.html
能找到,那么就直接返回这个静态资源,如果找不到,就next()交给下一个中间件,或get/post方法处理函数去处理。
下面对static.js中间件代码进行修改。
module.exports = function static(parent_path){ return function(req,res,next){ var path = url2path(req.url); function callback(err,data){ if(err){ // res.statusCode = 404; // 如果找不到资源,直接next() next(); } else{ res.write(data); res.end(); } } fs.readFile(parent_path+path,callback); } }
下一节,对新特性进行效果演示。
很赞哦! ( 0
)