我的应用程序使用koa-路由器,它使用koa-挂载挂载路由器,如下所示:
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路由器支持嵌套路由,并且有一些其他好的特性,所以如果现在不安装koa-挂载,可能会更容易实现这个功能吗?
发布于 2015-07-24 16:17:55
与其直接将路由器挂载到父应用程序,不如创建一个二级koa应用程序(它们不是重量级结构,因此不应该成为性能问题)。
在这个子应用程序中,添加路由器作为第一个中间件,添加一个catch处理程序作为第二个中间件,然后将子应用程序挂载到/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)
;
https://stackoverflow.com/questions/31500146
复制相似问题