推荐答案
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 请求。