Skip to Content

生命周期

此图展示了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 └─▶ 回复已发送

回复已发送 表示有效负载将由以下之一进行序列化: