1

/moduleそのディレクトリの下の一致するルートに対して実行される機能をいくつか追加したいと思います。

したがって、特定の一連のルートについては次のようになります。

/module/
/module/page
/module/things
/module/things/:thingid

/module上記のすべてのルートに対して実行するルーターのコードが必要です。/moduleはレンダリングせず、一般的なデータを取得してビュー コンテキストを構成するだけです。次に、他のルートの 1 つが実行され、ページがレンダリングされます。

これはkoa-routerで可能ですか?または、より良いパッケージはありますか?

編集:ネストされたルーターを実行し、ネストの前にミドルウェアを追加する必要があると思います:

var subRouter = new Router();
subRouter.get('/', function *(next){ doSomething(); });
subRouter.get('/page', function *(next){ doSomething(); });
subRouter.get('/things', function *(next){ doSomething(); });
subRouter.get('/things/thingid', function *(next){ doSomething(); });

mainRouter.use('/module',
               function *(next) { doPreRouteSteps(); yield next; },
               subRouter.routes()
);

動作しているようですが、これが醜いハックなのかどうかはわかりません。良い方法があればアドバイスお願いします。

4

3 に答える 3

2

koa-mountを使用して別のアプリを作成し、それを にマウントすることを検討して/moduleください。サブアプリには、任意のプレまたはポスト ミドルウェアを含めることができます。

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

var subApp = koa();
var router = koaRouter();
router.get('/page', function *(next){ ... });
subApp.use(function*() { ...pre-route stuff... });
subApp.use(router.routes());

var mainApp = koa();
mainApp.use(mount('/module', subApp));

モジュール性を促進するこのアプローチが気に入っています。

于 2015-08-12T04:18:07.383 に答える