【发布时间】:2012-07-18 14:48:22
【问题描述】:
我正在创建一个可重用的 node.js NavigationController 类,以便我可以在其他服务器端项目中重用它,如果我可能需要或其他人可能会觉得它有用。
这是用例。
var navController = new NavigationController({
routes : {
'/user/:action/:anything' : 'UserController',
'/app/:action' : 'AppController',
'/file/:action' : 'FileController',
'/feedback/:action' : 'FeedbackController',
'/:anything' : 'ErrorController'
},
ErrorController : 'ErrorController'
});
navController.init();
用户根据服务器请求可以调用该对象的这个函数。
navController.navigate(req, res);
现在 this 和控制器被正确调用了。 navigate(req, res) 函数下的东西,它是基于 URL 调用适当的控制器对象的一部分,被定义为名为 getRouteByPath(path) 的函数。此私有函数将获取路由并允许 navigate(req, res) 函数获取要调用的控制器类名称。
var getRouteByPath = function(path) {
for(var route in config.routes) {
var routeRegex = '';
var routeParts = route.split('/');
for(var rp = 0; rp < routeParts.length; rp++) {
// checking if route part starts with :
if(routeParts[rp].indexOf(':') === 0) {
// this is "anything" part
routeRegex += '[/]?([A-Za-z0-9]*)';
} else if(routeParts[rp] != "") {
routeRegex += '[/]?' + routeParts[rp];
}
}
var routeRegexResult = path.match(routeRegex);
if(routeRegexResult) {
console.log(routeRegexResult);
return route;
}
}
return null;
};
我太担心这个功能,好像这是正确的方法?
【问题讨论】:
-
这个问题属于codereview.stackexchange.com。
-
根据在适当网站上发布问题的定义,StackOverflow 应该只有与溢出的堆栈相关的问题:)
标签: javascript regex node.js webserver