rrestjs
Version:
HIgh performance node.js ROA & RESTFUL web framework.
63 lines (61 loc) • 1.84 kB
JavaScript
/*
rrestjs v1.0 新增功能,注册匹配路由
实例:
_restConfig.manualRouter = {
"get:put:post:/user/comein":function(req, res){res.send('hello wrold')}, //注册get,put,post,方法的路径
"/user/logout":function(req, res){res.send('goodbay!')}, //注册所有方法的路径
}
*/
var manual = _restConfig.manualRouter;
if(manual){
var outerror = require('./Outerror'),
msg = require('./msg/msg'),
manual_keys = Object.keys(manual),//获取所有注册的路由
router = {};//存放路由对象
manual_keys.forEach(function(v,i){
var pos = v.indexOf('/'),
method = v.slice(0, pos)
.split(':')
.filter(function(e){return !!e;})
.map(function(e){return e.toLowerCase();}),
url = v.slice(pos),
url_len = url.length;
url = (url[url_len-1] === '/')?url.slice(0, url_len-1):url;//补完url路径
var urlzz = new RegExp('^'+url.replace(/\{[^\}]+\}/g, '([^/]+)')+'$');
if(method.length>0){
method.forEach(function(m){
if(!router[m]) router[m] = [];
router[m].push({
func:manual[v],//注册路由fn事件
zz:urlzz //匹配正则
});
});
}
else{
if(!router['all']) router['all'] = [];
router['all'].push({
func:manual[v],//注册路由fn事件
zz:urlzz //匹配正则
})
}
});
var rall = router['all'];
var match_url = module.exports = function(req, res){
var m = req.method.toLowerCase(),
p = req.pathname;
if(router[m]){
for(var j=0,l=router[m].length; j<l; j++){
var rmj = router[m][j];
if(rmj.zz.test(p)) return rmj.func(req, res);
}
}
if(rall){
for(var i=0,len=rall.length; i<len; i++){
var rallmi = rall[i];
if(rallmi.zz.test(p)) return rallmi.func(req, res);
}
}
res.r404();
}
}
else module.exports = false;