我的应用程序使用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,现在可能更容易让它工作?
答案 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)
;