如何获得Koa-Router以正确匹配路线

时间:2019-10-02 13:45:34

标签: node.js typescript koa koa-router

所以我正在使用koakoa-router

我有一个使用mongo作为数据库的api,并且有一些这样的端点设置:

const router = new Router({ sensitive: false });

router.get(`/author`, controller.getAuthors);
router.get(`/author/:authorId`, controller.getAuthorById);
router.get(`/author/:authorId/books`, controller.getAuthorBooks);

但是,当我在GET上运行/author/:authorId/books时,我在日志中看到此错误:

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters 

,传递给Mongo来搜索作者的字符串是这样的:

oTKGdrJXo4aUVj9ZC22MMLeA7Z03/books

因此koa-router路由到/author/:authorId,其完整路径包括/books

如何防止这种情况?

我知道,如果我先注册更具体的端点,它将起作用,但是我不必担心注册端点的顺序,这将导致非常脆弱的解决方案

编辑

添加getAuthorById的实现:

public async getAuthorById(ctx: Context): Promise<void> {
  if (ctx.params.authorId) {
    const author = await this.authorService.findById(ctx.params.authorId);
    ctx.status = 200;
    ctx.body = author;
  } else {
    ctx.status = 404;
  }
}

0 个答案:

没有答案