【问题标题】:Handling invalid requests with koa-router and koa-mount使用 koa-router 和 koa-mount 处理无效请求
【发布时间】:2015-10-08 14:39:12
【问题描述】:

我的应用使用 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 可能会更容易让它工作?

【问题讨论】:

  • 什么是“RedisBoot”中间件?
  • 它是 Ember 部署方案的一部分,如果没有其他路由匹配,它会提供从 Redis 获取的静态 index.html 文件。

标签: koa koa-router


【解决方案1】:

不要将路由器直接安装到父应用,而是创建一个辅助 koa 应用(它们不是重量级的构造,因此不应该是性能问题)。

在这个子应用中,添加路由器作为第一个中间件,添加一个catch-all handler作为第二个中间件,然后将子应用挂载到/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)
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2016-05-02
    相关资源
    最近更新 更多