Koa 面试题 目录

Koa 的请求 (Request) 对象有哪些常用属性和方法?

推荐答案

Koa 的请求(Request)对象是 Koa 框架中用于处理 HTTP 请求的核心对象之一。它封装了与请求相关的属性和方法,以下是一些常用的属性和方法:

常用属性

  1. request.header: 获取请求头对象。
  2. request.method: 获取请求的 HTTP 方法(如 GET, POST 等)。
  3. request.url: 获取请求的 URL。
  4. request.originalUrl: 获取原始的请求 URL。
  5. request.path: 获取请求的路径部分。
  6. request.query: 获取解析后的查询字符串对象。
  7. request.host: 获取请求的主机名。
  8. request.hostname: 获取请求的主机名(不包含端口)。
  9. request.protocol: 获取请求的协议(如 httphttps)。
  10. request.secure: 判断请求是否通过 HTTPS 发起。
  11. request.ip: 获取请求的 IP 地址。
  12. request.ips: 获取请求经过的代理 IP 地址列表。
  13. request.subdomains: 获取请求的子域名列表。
  14. request.is(): 判断请求的 Content-Type 是否匹配给定的类型。
  15. request.length: 获取请求体的长度(从 Content-Length 头中获取)。

常用方法

  1. request.get(field): 获取请求头中指定字段的值。
  2. request.accepts(types): 检查请求是否接受指定的 MIME 类型。
  3. request.acceptsEncodings(encodings): 检查请求是否接受指定的编码。
  4. request.acceptsCharsets(charsets): 检查请求是否接受指定的字符集。
  5. request.acceptsLanguages(langs): 检查请求是否接受指定的语言。
  6. request.is(types): 检查请求的 Content-Type 是否匹配给定的类型。
  7. request.type: 获取请求的 Content-Type。
  8. request.charset: 获取请求的字符集。
  9. request.fresh: 判断请求是否新鲜(即缓存是否有效)。
  10. request.stale: 判断请求是否过时(即缓存是否无效)。
  11. request.idempotent: 判断请求是否是幂等的(如 GET, PUT, DELETE 等)。
  12. request.socket: 获取请求的底层 socket 对象。

本题详细解读

Koa 的请求对象(ctx.requestctx.req)是 Koa 框架中用于处理 HTTP 请求的核心对象。它封装了与请求相关的属性和方法,使得开发者可以方便地获取和操作请求的各个部分。

请求对象的属性

  • request.header: 这个属性返回一个包含所有请求头的对象。例如,request.header['user-agent'] 可以获取到客户端的 User-Agent 信息。

  • request.method: 这个属性返回请求的 HTTP 方法,如 GET, POST, PUT, DELETE 等。开发者可以根据不同的请求方法来处理不同的业务逻辑。

  • request.url: 这个属性返回请求的 URL,包括路径和查询字符串。例如,对于请求 http://example.com/path?query=123request.url 将返回 /path?query=123

  • request.originalUrl: 这个属性返回原始的请求 URL,与 request.url 类似,但在某些情况下(如使用中间件重写 URL)可能会有所不同。

  • request.path: 这个属性返回请求的路径部分,不包含查询字符串。例如,对于请求 http://example.com/path?query=123request.path 将返回 /path

  • request.query: 这个属性返回解析后的查询字符串对象。例如,对于请求 http://example.com/path?query=123request.query 将返回 { query: '123' }

  • request.host: 这个属性返回请求的主机名,包括端口号(如果有)。例如,对于请求 http://example.com:8080request.host 将返回 example.com:8080

  • request.hostname: 这个属性返回请求的主机名,不包含端口号。例如,对于请求 http://example.com:8080request.hostname 将返回 example.com

  • request.protocol: 这个属性返回请求的协议,通常是 httphttps。开发者可以根据协议来决定是否启用安全措施。

  • request.secure: 这个属性是一个布尔值,用于判断请求是否通过 HTTPS 发起。如果请求是通过 HTTPS 发起的,request.secure 将返回 true

  • request.ip: 这个属性返回请求的 IP 地址。如果请求经过了代理服务器,request.ip 将返回最后一个代理服务器的 IP 地址。

  • request.ips: 这个属性返回请求经过的代理 IP 地址列表。如果请求经过了多个代理服务器,request.ips 将返回所有代理服务器的 IP 地址列表。

  • request.subdomains: 这个属性返回请求的子域名列表。例如,对于请求 http://sub.example.comrequest.subdomains 将返回 ['sub']

  • request.is(): 这个方法用于判断请求的 Content-Type 是否匹配给定的类型。例如,request.is('json') 将返回 true 如果请求的 Content-Type 是 application/json

  • request.length: 这个属性返回请求体的长度,从 Content-Length 头中获取。如果请求头中没有 Content-Lengthrequest.length 将返回 undefined

请求对象的方法

  • request.get(field): 这个方法用于获取请求头中指定字段的值。例如,request.get('User-Agent') 将返回客户端的 User-Agent 信息。

  • request.accepts(types): 这个方法用于检查请求是否接受指定的 MIME 类型。例如,request.accepts('json') 将返回 true 如果客户端接受 application/json

  • request.acceptsEncodings(encodings): 这个方法用于检查请求是否接受指定的编码。例如,request.acceptsEncodings('gzip') 将返回 true 如果客户端接受 gzip 编码。

  • request.acceptsCharsets(charsets): 这个方法用于检查请求是否接受指定的字符集。例如,request.acceptsCharsets('utf-8') 将返回 true 如果客户端接受 utf-8 字符集。

  • request.acceptsLanguages(langs): 这个方法用于检查请求是否接受指定的语言。例如,request.acceptsLanguages('en') 将返回 true 如果客户端接受 en 语言。

  • request.is(types): 这个方法用于检查请求的 Content-Type 是否匹配给定的类型。例如,request.is('json') 将返回 true 如果请求的 Content-Type 是 application/json

  • request.type: 这个方法返回请求的 Content-Type。例如,request.type 将返回 application/json 如果请求的 Content-Type 是 application/json

  • request.charset: 这个方法返回请求的字符集。例如,request.charset 将返回 utf-8 如果请求的字符集是 utf-8

  • request.fresh: 这个方法用于判断请求是否新鲜(即缓存是否有效)。如果请求是新鲜的,request.fresh 将返回 true

  • request.stale: 这个方法用于判断请求是否过时(即缓存是否无效)。如果请求是过时的,request.stale 将返回 true

  • request.idempotent: 这个方法用于判断请求是否是幂等的(如 GET, PUT, DELETE 等)。如果请求是幂等的,request.idempotent 将返回 true

  • request.socket: 这个方法返回请求的底层 socket 对象。开发者可以通过这个对象获取更多的底层网络信息。

通过以上属性和方法,Koa 的请求对象提供了丰富的功能,使得开发者可以方便地处理和操作 HTTP 请求。

纠错
反馈