推荐答案
在 Fastify 中,可以使用 addHook
方法注册钩子。addHook
方法允许你在请求生命周期的不同阶段插入自定义逻辑。以下是一个简单的示例:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- --- -- ------------------ ---------------------------- --------- ------ ----- -- - -------------------- ----------- ------- --- -- ------------------ ------------------------- --------- ------ -------- ----- -- - --------------------- -- ----- -- -- ------- ------- --- ---------------- ----- --------- ------ -- - ------ - ------ ------- -- --- -------------------- ----- -- - -- ----- - ----------------------- ---------------- - ------------------- -- ------- -- ------------------------ ---
本题详细解读
1. addHook
方法概述
addHook
是 Fastify 提供的一个方法,用于在请求生命周期的不同阶段注册钩子。钩子允许你在请求处理的不同阶段插入自定义逻辑,例如日志记录、请求验证、响应修改等。
2. 钩子的类型
Fastify 支持多种类型的钩子,常见的包括:
- onRequest: 在请求到达时触发,通常用于日志记录或请求验证。
- preHandler: 在路由处理函数执行之前触发,通常用于权限检查或数据预处理。
- onSend: 在响应发送之前触发,通常用于修改响应内容或记录日志。
- onResponse: 在响应发送之后触发,通常用于记录响应时间或清理资源。
3. 钩子的参数
每个钩子函数接收不同的参数,具体取决于钩子的类型。例如:
- onRequest: 接收
request
和reply
对象,以及一个done
回调函数。 - onSend: 接收
request
、reply
、payload
和done
回调函数。
4. 钩子的执行顺序
钩子的执行顺序与注册顺序一致。例如,如果你注册了多个 onRequest
钩子,它们将按照注册的顺序依次执行。
5. 异步钩子
Fastify 支持异步钩子,你可以使用 async/await
或返回一个 Promise
。例如:
fastify.addHook('onRequest', async (request, reply) => { await someAsyncOperation(); console.log('Async hook executed'); });
6. 钩子的错误处理
如果钩子中发生错误,你可以通过调用 done(err)
或抛出异常来中断请求处理流程。Fastify 会自动捕获错误并返回适当的响应。
fastify.addHook('onRequest', (request, reply, done) => { if (!request.headers['authorization']) { done(new Error('Unauthorized')); } else { done(); } });
通过 addHook
方法,你可以灵活地在 Fastify 应用中插入自定义逻辑,从而增强应用的功能和可维护性。