私は再利用可能な 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;
};
これが正しい方法であるかのように、私はこの機能についてあまりにも心配していますか?