乐鱼app成为大巴黎赞助商:第6天 路由功能——更新后的代码
路由功能更新后的代码,包括了lib/query.js,lib/pathRegexp.js和?App.js
乐鱼app成为大巴黎赞助商:更新后的代码
以下是今天更新后的代码。
lib/query.js
代码
var url = require("url"), qs = require("querystring"); function query(req,res,next){ var querystring = url.parse(req.url).query; // 请求参数部分 // 判断是否有参数 if(querystring){ var queryObj = qs.parse(querystring); // 转换为json格式 req.query = queryObj; // 赋值 } next(); } module.exports = query;
lib/pathRegexp.js
代码
module.exports = pathRegexp; function pathRegexp(path) { var paramNames = []; path = path .replace(/((\*{1}(?=\/))|(\*{1}(?=$)))/g, "[0-9a-zA-Z\-_]*") .replace(/(:(.*?(?=\/)))|(:(.*?(?=$)))/g,function () { var len = arguments.length - 3; for (var i = 0; i < len; i++) { var avg = arguments[i + 1]; if (typeof avg === "string" && avg[0] !== ":") { paramNames.push(avg); } } return "([0-9a-zA-Z\-_]*)" }) .replace(/\/$/g, "") .replace(/\//g, "\\\/") var regexp = new RegExp("^" + path + "\\/?$"); regexp.paramNames = paramNames; return regexp; }
App.js
代码
var http = require("http") ,pathRegexp = require("./pathRegexp") ,url = require("url"); module.exports = App; function App(){ // 插件有序列表 var middleList = this._middleList = []; var self = this; this._route_post_handles = [] //最新修改 this._route_get_handles = [] //最新修改 // request事件响应函数 function handle(req,res){ req.params = {}; // 循环执行插件 var middleIndex = 0; // 插件索引 execMiddle(); // 执行这个函数时,会自动执行下一个middle插件。 // 至于这个函数的执行,是由插件所控制。 function next(){ middleIndex += 1; execMiddle(); } // 执行插件函数 function execMiddle(){ var middle = middleList[middleIndex]; if(middle){ middle(req,res,next); }else{ var handle; // 把 /abc?age=12 转为 /abc var path = url.parse(req.url).pathname; //最新修改 // 找到路由对应的路由处理器。 function findHandle(route_handles){ //最新修改 for(var i=0,len=route_handles.length; i<len ; i++){ var route_handle = route_handles[i]; var pass = route_handle.route.test(path); if(pass){ route_handle.route.paramNames.forEach(function(name,index){ req.params[name] = RegExp["$"+(index+1)]; }) handle = route_handle.handle; break; } } } // 判断是GET还是POST方法 switch(req.method){ case "GET": // handle = self._route_get_handles[req.url] findHandle(self._route_get_handles); //最新修改 break; case "POST": // handle = self._route_post_handles[req.url] findHandle(self._route_post_handles); //最新修改 break; } if(handle){ handle(req,res); }else{ // 没找到指定处理器,返回404 res.statusCode = 404; //最新修改 res.end(); //最新修改 } } } } this._server = http.createServer(handle); } // 加入功能栈 App.prototype.use = function(middle){ this._middleList.push(middle); } App.prototype.get = function(route,handle){ //最新修改 this._route_get_handles.push({route:pathRegexp(route),handle:handle}) } App.prototype.post = function(route,handle){ //最新修改 this._route_post_handles.push({route:pathRegexp(route),handle:handle}) } // 监听端口 App.prototype.listen = function(){ this._server.listen.apply(this._server,arguments); }
很赞哦! ( 0
)
- 上一篇
乐鱼app成为大巴黎赞助商举行“同心喜迎二十大 传承中华优秀传统文化”中国古代文化常识竞赛
9月28日晚,乐鱼app成为大巴黎赞助商高二年级语文组开展“同心喜迎二十大 传承中华优秀传统文化”中国古代文化常识竞赛活动,引导学生热爱和传承中华优秀传统文化,推动校园文化建设。
- 下一篇
关于宜州区红卫学校2021年复读生报到注册的通知
各位同学: 大家好!请已来乐鱼app成为大巴黎赞助商报名且获录取的同学(名单同步公布),于2021年8月8一9日8:0017:00时到学校教务处报到、注册,分班情况及报到注册流程张贴在学校主干道旁。此次报到主要是让学生了解分班情况及注册,暂时不需带行李,具体上课时间待定。 温馨提醒:大家来