Fastify
## Request
处理函数的第一个参数是 `Request`.
Request 是 Fastify 的核心对象,包含了以下字段:
- `query` - 解析后的 querystring,其格式由 [`querystringParser`](Server.md#querystringParser) 指定。
- `body` - 消息主体
- `params` - URL 参数
- [`headers`](#headers) - header 的 getter 与 setter
- `raw` - Node 原生的 HTTP 请求
- `req` _(不推荐,请使用 `.raw`)_ - Node 原生的 HTTP 请求
- `server` - Fastify 服务器的实例,以当前的[封装上下文](Encapsulation.md)为作用域。
- `id` - 请求 ID
- `log` - 请求的日志实例
- `ip` - 请求方的 ip 地址
- `ips` - x-forwarder-for header 中保存的请求源 ip 数组,按访问先后排序 (仅当 [`trustProxy`](Server.md#factory-trust-proxy) 开启时有效)
- `hostname` - 请求方的主机名 (当 [`trustProxy`](Server.md#factory-trust-proxy) 启用时,从 `X-Forwarded-Host` header 中获取)。为了兼容 HTTP/2,当没有相关 header 存在时,将返回 `:authority`。
- `protocol` - 请求协议 (`https` 或 `http`)
- `method` - 请求方法
- `url` - 请求路径
- `routerMethod` - 处理请求的路由函数
- `routerPath` - 处理请求的路由的匹配模式
- `is404` - 当请求被 404 处理时为 true,反之为 false
- `connection` - 不推荐,请使用 `socket`。请求的底层连接
- `socket` - 请求的底层连接
- `context` - Fastify 内建的对象。你不应该直接使用或修改它,但可以访问它的下列特殊属性:
- `context.config` - 路由的 [`config`](Routes.md#routes-config) 对象。
### Headers
`request.headers` 返回来访请求的 header 对象。你也可以如下设置自定义的 header:
```js
request.headers = {
foo: "bar",
baz: "qux",
};
```
该操作能向请求 header 添加新的值,且该值能通过 `request.headers.bar` 读取。此外,`request.raw.headers` 能让你访问标准的请求 header。
```js
fastify.post("/:params", options, function (request, reply) {
console.log(request.body);
console.log(request.query);
console.log(request.params);
console.log(request.headers);
console.log(request.raw);
console.log(request.server);
console.log(request.id);
console.log(request.ip);
console.log(request.ips);
console.log(request.hostname);
console.log(request.protocol);
console.log(request.url);
console.log(request.routerMethod);
console.log(request.routerPath);
request.log.info("some info");
});
```