NodeJS 简单路由中间件
//使用URL中的parse方法
var parse = require("url").parse;
//这里只接受一个参数,就是routes对象
module.exports = function route(obj){
return function(req,res,next){
//检查以确保req.method定义了
if(!obj[req.method]){
next();//如果未定义,调用next()并停止一切后续操作
return;
}
var routes = obj[req.method];//查找req.method对应的路径
var url = parse(req.url);//解析URL以便跟pathname匹配
var paths = Object.keys(routes);//将req.method对应的路径存放在数组中
//遍历路径
for(var i = 0;i < paths.length;i++){
var path = path[i];
var fn = routes[path];
path = path
.replace(/\//g,"\\/")
.replace(/:(\w+)/g,"([^\\/]+)");
var re = new ReqExp("^" + path + "$");
var captures = url.pathname.match(re);
//尝试跟pathname匹配
if(captures){
//拼凑参数数组
var args = [req,res].concat(captures.slice(1));
fn.apply(null,args);
//当有相匹配的函数时,返回,以防止后续的next()的调用
return;
}
}
next();
};
}