推荐答案
Koa 的请求(Request)对象是 Koa 框架中用于处理 HTTP 请求的核心对象之一。它封装了与请求相关的属性和方法,以下是一些常用的属性和方法:
常用属性
- request.header: 获取请求头对象。
- request.method: 获取请求的 HTTP 方法(如
GET,POST等)。 - request.url: 获取请求的 URL。
- request.originalUrl: 获取原始的请求 URL。
- request.path: 获取请求的路径部分。
- request.query: 获取解析后的查询字符串对象。
- request.host: 获取请求的主机名。
- request.hostname: 获取请求的主机名(不包含端口)。
- request.protocol: 获取请求的协议(如
http或https)。 - request.secure: 判断请求是否通过 HTTPS 发起。
- request.ip: 获取请求的 IP 地址。
- request.ips: 获取请求经过的代理 IP 地址列表。
- request.subdomains: 获取请求的子域名列表。
- request.is(): 判断请求的 Content-Type 是否匹配给定的类型。
- request.length: 获取请求体的长度(从
Content-Length头中获取)。
常用方法
- request.get(field): 获取请求头中指定字段的值。
- request.accepts(types): 检查请求是否接受指定的 MIME 类型。
- request.acceptsEncodings(encodings): 检查请求是否接受指定的编码。
- request.acceptsCharsets(charsets): 检查请求是否接受指定的字符集。
- request.acceptsLanguages(langs): 检查请求是否接受指定的语言。
- request.is(types): 检查请求的 Content-Type 是否匹配给定的类型。
- request.type: 获取请求的 Content-Type。
- request.charset: 获取请求的字符集。
- request.fresh: 判断请求是否新鲜(即缓存是否有效)。
- request.stale: 判断请求是否过时(即缓存是否无效)。
- request.idempotent: 判断请求是否是幂等的(如
GET,PUT,DELETE等)。 - request.socket: 获取请求的底层 socket 对象。
本题详细解读
Koa 的请求对象(ctx.request 或 ctx.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=123,request.url将返回/path?query=123。request.originalUrl: 这个属性返回原始的请求 URL,与
request.url类似,但在某些情况下(如使用中间件重写 URL)可能会有所不同。request.path: 这个属性返回请求的路径部分,不包含查询字符串。例如,对于请求
http://example.com/path?query=123,request.path将返回/path。request.query: 这个属性返回解析后的查询字符串对象。例如,对于请求
http://example.com/path?query=123,request.query将返回{ query: '123' }。request.host: 这个属性返回请求的主机名,包括端口号(如果有)。例如,对于请求
http://example.com:8080,request.host将返回example.com:8080。request.hostname: 这个属性返回请求的主机名,不包含端口号。例如,对于请求
http://example.com:8080,request.hostname将返回example.com。request.protocol: 这个属性返回请求的协议,通常是
http或https。开发者可以根据协议来决定是否启用安全措施。request.secure: 这个属性是一个布尔值,用于判断请求是否通过 HTTPS 发起。如果请求是通过 HTTPS 发起的,
request.secure将返回true。request.ip: 这个属性返回请求的 IP 地址。如果请求经过了代理服务器,
request.ip将返回最后一个代理服务器的 IP 地址。request.ips: 这个属性返回请求经过的代理 IP 地址列表。如果请求经过了多个代理服务器,
request.ips将返回所有代理服务器的 IP 地址列表。request.subdomains: 这个属性返回请求的子域名列表。例如,对于请求
http://sub.example.com,request.subdomains将返回['sub']。request.is(): 这个方法用于判断请求的 Content-Type 是否匹配给定的类型。例如,
request.is('json')将返回true如果请求的 Content-Type 是application/json。request.length: 这个属性返回请求体的长度,从
Content-Length头中获取。如果请求头中没有Content-Length,request.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 请求。