我正在创建一个可重用的 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);
现在这个和控制器被正确地调用了。作为基于 URL 调用适当控制器对象的一部分的navigate(req, res)函数下的东西被定义为名为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;
};
我太担心这个功能,好像这是正确的方法?