2015-07-19 5 views
0

Мое приложение использует КоА-маршрутизатор и он подключает маршрутизатор, используя КоА-крепление, как:Обработка недействительных запросов с коа-маршрутизатором и коа монтажа

var Router = require('koa-router'); 
var mount = require('koa-mount'); 

app = koa(); 

var router = new Router(); 
router.get('/foo', function *() { this.body = { success: true })); 

app 
    .use(mount('/api', router.middleware())) 
    .use(RedisBoot) 
; 

Желаемое поведение является то, что маршрут, начинается с api, который не определен, должен дать 503 или что-то в этом роде. Вместо этого запрос попадает в обработчик RedisBoot. Я попытался добавить дополнительные правила в начале и конце router, но по какой-то причине они, похоже, не вызываются.

Я заметил, что новые версии koa-router поддерживают вложенные маршруты и имеют некоторые другие приятные функции, так что, возможно, было бы легче получить эту работу сейчас без koa-mount?

+0

Что такое промежуточное ПО RedisBoot? –

+0

Это часть схемы развертывания Ember, которая служит статическому файлу 'index.html', взятому из Redis, если никакие другие маршруты не совпадают. –

ответ

2

Вместо того, чтобы устанавливать маршрутизатор непосредственно в родительское приложение, создайте дополнительное приложение koa (они не являются тяжеловесными конструкциями, поэтому это не должно быть проблемой производительности).

В этом суб-приложении добавьте маршрутизатор в качестве первого промежуточного программного обеспечения, добавьте обработчик catch-all в качестве второго промежуточного программного обеспечения, затем подключите субприложение к главному приложению под /api.

var Router = require('koa-router'); 
var mount = require('koa-mount'); 

var app = koa(); 
var subApp = koa(); 

var router = new Router(); 
router.get('/foo', function *() { this.body = { success: true })); 

subApp 
    .use(router.middleware()) 
    .use(function *() { ... throw 503 or something... }) 
; 

app 
    .use(mount('/api', subApp)) 
    .use(RedisBoot) 
;