使用koa-router和koa-mount处理无效请求

时间:2015-07-19 10:17:24

标签: koa koa-router

我的应用程序使用koa-router,并使用koa-mount安装路由器,如:

p.N(M-N+2)/2 + q.(N+1)(M-N+1)/2 = N(M-N+2)/2 + q(M-1)/2.

理想的行为是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) ; 开头但未定义的路线应该给出503 等等。相反,请求会转到RedisBoot处理程序。我已尝试在api的开头和结尾添加其他规则,但出于某种原因,它们似乎没有被调用。

我注意到较新版本的koa-router支持嵌套路由并具有其他一些不错的功能,所以如果没有koa-mount,现在可能更容易让它工作?

1 个答案:

答案 0 :(得分: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)
;