请说明在 Koa 框架中,获取客户端请求参数以及查询字符串(query string)的具体方法和区别。
考察说明
考察对 Koa 中请求对象(ctx.request)以及参数解析机制的掌握程度。
回答思路
- 【回答框架 1】Koa 中通过 ctx.request 对象访问请求信息。查询字符串指 URL 中 ? 后面的部分,通常用于 GET 请求,可以通过 ctx.request.query 获取解析后的对象,或者通过 ctx.request.querystring 获取原始字符串。
- 【回答框架 2】请求参数则包括 URL 路径参数(如 /user/:id)、查询字符串参数以及请求体(body)中的参数。路径参数通过 ctx.params 获取(需要配合路由中间件如 koa-router)。请求体参数需要借助中间件如 koa-bodyparser 来解析,支持 JSON、表单等格式。
- 【回答框架 3】区别在于查询字符串是 URL 的一部分,通常无长度限制,但敏感数据不应放在其中;请求体则适合传输大量或敏感数据,但需要额外的解析步骤。Koa 本身不内置 body 解析,因此需使用中间件。
- 【回答框架 4】在 Koa 中,ctx.request.body 在使用了 bodyparser 后可用,而 ctx.query 和 ctx.querystring 是 Koa 原生的。ctx.query 是经过解析的对象,ctx.querystring 是原始字符串。路径参数则是路由匹配后的结果。
- 【回答框架 5】实际开发中,要根据请求类型选择合适的方式:GET 请求参数常放于查询字符串,POST/PUT 请求参数放于请求体,路径参数用于标识资源。需注意安全性和编码问题。
- 【关键点 1】Koa 中查询字符串通过 ctx.request.query 或 ctx.querystring 获取。
- 【关键点 2】请求体参数需使用 koa-bodyparser 等中间件解析。
- 【关键点 3】路径参数通过路由中间件提供,如 koa-router 的 ctx.params。
- 【关键点 4】ctx.query 返回对象,ctx.querystring 返回原始字符串。
- 【关键点 5】解析请求体需注意安全,防止恶意内容。
- 【易错点 1】未使用 bodyparser 时 ctx.request.body 为 undefined。
- 【易错点 2】混淆 ctx.query 和 ctx.querystring 导致类型错误。
- 【易错点 3】错误地假设所有请求都有 body,需检查请求方法。