所以我正在使用koa
和koa-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;
}
}