请描述在 Koa 框架中实现路由功能的具体方法,包括实现原理和常用方式。
考察说明
考察候选人是否掌握 Koa 框架下的路由实现原理和常用实践。
回答思路
- 【回答框架 1】Koa 路由基于中间件机制,每个路由对应一个中间件函数,通过 app.use 或 koa-router 等库注册。路由匹配通常靠请求方法和路径。
- 【回答框架 2】原生实现时,使用 ctx.path 和 ctx.method 匹配,例如 if (ctx.method === 'GET' && ctx.path === '/') 返回响应。路由库则将匹配逻辑封装成中间件,如 koa-router 使用 path-to-regexp 解析路径。
- 【回答框架 3】注册路由后,通过 app.use(router.routes()).use(router.allowedMethods()) 挂载,allowedMethods 用于处理不支持的请求方法(如返回 405)。
- 【回答框架 4】路由参数通过冒号定义,如 /users/:id,在 ctx.params 获取。中间件执行顺序影响路由匹配,常将通用中间件放在路由之前。
- 【关键点 1】Koa 路由本质是中间件,按路径和方法匹配。
- 【关键点 2】常用 koa-router 库,支持路由参数和多个中间件。
- 【关键点 3】app.use(router.routes()) 挂载路由,allowedMethods 处理 OPTIONS/405。
- 【易错点 1】忘记挂载 router.allowedMethods() 可能导致方法错误时返回 404 而非 405。
- 【易错点 2】中间件顺序错误可能导致路由匹配被前置逻辑拦截。