生命周期
此图展示了Fastify的内部生命周期。
每个部分右侧分支表示生命周期中的下一个阶段。左侧分支显示如果父级抛出错误时生成的相应错误代码。所有错误都会自动由Fastify处理。
接收到请求
│
└─▶ 路由
│
└─▶ 实例日志记录器
│
4**/5** ◀─┴─▶ onRequest Hook
│
4**/5** ◀─┴─▶ preParsing Hook
│
4**/5** ◀─┴─▶ 解析
│
4**/5** ◀─┴─▶ preValidation Hook
│
400 ◀─┴─▶ 验证
│
4**/5** ◀─┴─▶ preHandler Hook
│
4**/5** ◀─┴─▶ 用户处理程序
│
└─▶ 回复
│
4**/5** ◀─┴─▶ preSerialization Hook
│
└─▶ onSend Hook
│
4**/5** ◀─┴─▶ 发送响应
│
└─▶ onResponse Hook
在 User Handler
之前或期间,可以调用 reply.hijack()
来:
- 阻止Fastify运行后续钩子和用户处理程序
- 防止Fastify自动发送响应
如果使用 reply.raw
发送响应,则 onResponse
钩子仍然会被执行。
回复生命周期
当用户处理请求时,结果可能是:
- 在异步处理器中:它返回一个有效负载或抛出一个
Error
- 在同步处理器中:它发送一个有效负载或一个
Error
实例
如果回复被劫持,则跳过所有后续步骤。否则,在提交后,数据流如下所示:
★ schema 验证错误
│
└─▶ schemaErrorFormatter
│
回复已发送 ◀── JSON ─┴─ Error 实例
│
│ ★ 抛出一个 Error
★ 发送或返回 │ │
│ │ │
│ ▼ │
回复已发送 ◀── JSON ─┴─ Error 实例 ──▶ setErrorHandler ◀─────┘
│
回复已发送 ◀── JSON ─┴─ Error 实例 ──▶ onError Hook
│
└─▶ 回复已发送
回复已发送
表示有效负载将由以下之一进行序列化: