Koa 面试题 目录

Koa 中 ctx.response 和 ctx.res 的区别是什么?

推荐答案

在 Koa 中,ctx.responsectx.res 是两个不同的对象,分别用于处理 HTTP 响应的不同方面。

  • ctx.response 是 Koa 封装的响应对象,提供了更高层次的 API 来处理 HTTP 响应。它是 Koa 的上下文对象 ctx 的一部分,通常用于设置响应状态码、响应头、响应体等。

  • ctx.res 是 Node.js 原生的 HTTP 响应对象,即 http.ServerResponse 的实例。它提供了底层的 API 来处理 HTTP 响应,通常用于直接操作底层的响应流。

本题详细解读

ctx.response

ctx.response 是 Koa 封装的响应对象,它提供了一系列便捷的方法和属性来处理 HTTP 响应。以下是一些常用的属性和方法:

  • ctx.response.status: 设置或获取 HTTP 响应状态码。
  • ctx.response.body: 设置或获取响应体内容。
  • ctx.response.set(field, value): 设置响应头字段。
  • ctx.response.get(field): 获取响应头字段的值。
  • ctx.response.redirect(url): 重定向到指定的 URL。

例如,设置响应状态码和响应体:

ctx.res

ctx.res 是 Node.js 原生的 HTTP 响应对象,即 http.ServerResponse 的实例。它提供了底层的 API 来处理 HTTP 响应。以下是一些常用的属性和方法:

  • ctx.res.statusCode: 设置或获取 HTTP 响应状态码。
  • ctx.res.writeHead(statusCode, headers): 写入响应头和状态码。
  • ctx.res.write(chunk): 写入响应体内容。
  • ctx.res.end(data): 结束响应并发送数据。

例如,使用原生方法设置响应状态码和响应体:

区别总结

  • ctx.response 是 Koa 封装的响应对象,提供了更高层次的 API,更适合在 Koa 应用中使用。
  • ctx.res 是 Node.js 原生的响应对象,提供了底层的 API,适合需要直接操作底层响应流的场景。

在大多数情况下,推荐使用 ctx.response,因为它更符合 Koa 的设计理念,使用起来也更加方便。只有在需要直接操作底层响应流时,才需要使用 ctx.res

纠错
反馈