跳至主要内容
版本:最新版本 (v5.0.x)

生命周期

生命周期

遵循 Fastify 内部生命周期的模式。

每个部分的右侧分支是生命周期的下一阶段,左侧分支是如果父级抛出错误将生成的相应错误代码(请注意,所有错误都由 Fastify 自动处理)

Incoming Request

└─▶ Routing

└─▶ Instance Logger

4**/5** ◀─┴─▶ onRequest Hook

4**/5** ◀─┴─▶ preParsing Hook

4**/5** ◀─┴─▶ Parsing

4**/5** ◀─┴─▶ preValidation Hook

400 ◀─┴─▶ Validation

4**/5** ◀─┴─▶ preHandler Hook

4**/5** ◀─┴─▶ User Handler

└─▶ Reply

4**/5** ◀─┴─▶ preSerialization Hook

└─▶ onSend Hook

4**/5** ◀─┴─▶ Outgoing Response

└─▶ onResponse Hook

用户处理器 之前或期间的任何时间点,都可以调用 reply.hijack() 以阻止 Fastify

  • 运行所有后续钩子和用户处理器
  • 自动发送响应

注意 (*):如果使用 reply.raw 将响应发送回用户,则仍将执行 onResponse 钩子

响应生命周期

每当用户处理请求时,结果可能是

  • 在异步处理器中:它返回一个有效负载
  • 在异步处理器中:它抛出一个 Error
  • 在同步处理器中:它发送一个有效负载
  • 在同步处理器中:它发送一个 Error 实例

如果响应被劫持,我们将跳过以下所有步骤。否则,在提交响应时,执行的数据流如下

                        ★ schema validation Error

└─▶ schemaErrorFormatter

reply sent ◀── JSON ─┴─ Error instance

│ ★ throw an Error
★ send or return │ │
│ │ │
│ ▼ │
reply sent ◀── JSON ─┴─ Error instance ──▶ setErrorHandler ◀─────┘

reply sent ◀── JSON ─┴─ Error instance ──▶ onError Hook

└─▶ reply sent

注意:响应已发送 表示 JSON 有效负载将由

  • 如果设置了响应序列化器 进行序列化
  • 或者当为返回的 HTTP 状态代码设置了 JSON 模式时,由序列化器编译器 进行序列化
  • 或者由默认的 JSON.stringify 函数进行序列化