1

我的应用程序使用 koa-router,它使用 koa-mount 安装路由器,如下所示:

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 可能更容易让它工作?

4

1 回答 1

3

与其将路由器直接安装到父应用程序,不如创建一个辅助 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)
;
于 2015-07-24T16:17:55.570 回答