2015-07-31 3 views
1

Скажем, у меня есть массив маршрутов который выглядит следующим образом:Динамические маршруты в Коа?

var routes = [ 
    { 
     route: '/', 
     handler: function*() { this.body = yield render('home', template.home) } 
    }, 
    { 
     route: '/about', 
     handler: function*() { this.body = yield render('about', template.about) } 
    } 
]; 

Что бы быть лучшим способом app.use их? Я пытался это делать (с koa-route как моим промежуточным слоем), как это:

Promise.each(routes, function(r) { 
    app.use(route.get(r.route, r.handler)); 
}).then(function() { 
    app.use(function *NotFound(next) { 
     this.status = 404; 
     this.body = 'not found'; 
    }); 
}); 

Но не кажется, что это будет работать (я также попытался простые routes.forEach). Что я делаю не так?

ответ

3

После некоторого более мастерить, я сумел получить код выше работает, делая это:

var routes = { 
    '/': function*() { this.body = yield render('home', template.home); }, 
    '/about': function*() { this.body = yield render('about', template.about); } 
}; 

app.use(function* respond() { 
    if (routes[this.request.url]) 
     yield routes[this.request.url].call(this); 
}); 

Я принимаю этот ответ, когда я могу, но если кто-нибудь опубликовать лучшее решение, я Я с радостью соглашусь с ними.