在 Koa 框架中,可以通过哪些方式来设置 HTTP 响应的 Content-Type?请说明具体方法并简要比较
考察说明
考查对 Koa 响应对象 API 的掌握程度,以及能否区分设置 Content-Type 的不同手段。
回答思路
- 【回答框架 1】Koa 的响应对象 ctx.response 或简写 ctx 上提供了 set 方法,可直接设置响应头,如 ctx.set('Content-Type', 'application/json'),这是最通用的方式。
- 【回答框架 2】也可通过 ctx.type 属性设置,例如 ctx.type = 'json',Koa 会自动映射为完整的 MIME 类型 application/json; charset=utf-8。
- 【回答框架 3】另外可通过 ctx.body 的值推断 Content-Type,若传入对象,Koa 默认设置 application/json;若传入字符串,默认 text/plain 或 text/html,可用 ctx.type 覆盖。
- 【回答框架 4】设置时注意优先级:显式 set 覆盖 type 推断,但仅在响应未发送前有效。
- 【关键点 1】使用 ctx.set 可直接指定任意 Content-Type 值。
- 【关键点 2】ctx.type 属性接受 MIME 简写或完整类型,并自动补全字符集。
- 【关键点 3】ctx.body 的类型推断可作为默认设置,但显式设置优先级更高。
- 【易错点 1】设置了 Content-Type 后,若后续修改 ctx.body 导致类型变化,Koa 可能不会自动更新,需重新设置。
- 【易错点 2】使用 ctx.type 时若传入非法值,可能不会报错但会导致响应头不正确。