推荐答案
在 Fastify 中,onRequest
钩子用于在请求处理流程的最开始阶段执行自定义逻辑。你可以在路由级别或全局级别注册 onRequest
钩子。以下是一个示例:
fastify.addHook('onRequest', async (request, reply) => { console.log('Request received:', request.method, request.url); // 可以在这里执行一些预处理逻辑 });
你还可以在路由级别使用 onRequest
钩子:
-- -------------------- ---- ------- --------------- ------- ------ ---- ----------- ---------- ----- --------- ------ -- - --------------------------- --------- ------- -- -------- ----- --------- ------ -- - ------ - -------- ------- --------- -- - ---
本题详细解读
1. onRequest
钩子的作用
onRequest
钩子是 Fastify 生命周期钩子之一,它在请求到达服务器后立即执行,但在路由匹配之前。因此,它非常适合用于执行一些全局的预处理逻辑,例如日志记录、请求验证、身份验证等。
2. 全局 onRequest
钩子
全局 onRequest
钩子适用于所有请求。你可以通过 fastify.addHook
方法来注册全局钩子。例如:
fastify.addHook('onRequest', async (request, reply) => { console.log('Global onRequest hook triggered'); });
3. 路由级别 onRequest
钩子
如果你只想在特定路由上执行 onRequest
钩子,可以在定义路由时直接添加 onRequest
钩子。例如:
-- -------------------- ---- ------- --------------- ------- ------ ---- ----------- ---------- ----- --------- ------ -- - --------------------------- --------- ---- ------------ -- -------- ----- --------- ------ -- - ------ - -------- ------- --------- -- - ---
4. 异步处理
onRequest
钩子支持异步操作。你可以在钩子中使用 async/await
来处理异步任务,例如从数据库中获取数据或调用外部 API。
5. 钩子的执行顺序
在 Fastify 中,钩子的执行顺序非常重要。onRequest
钩子是在请求处理流程的最开始阶段执行的,因此在它之后的其他钩子(如 preHandler
)会依次执行。
6. 错误处理
如果在 onRequest
钩子中抛出错误,Fastify 会立即停止处理请求,并返回一个错误响应。你可以通过 reply.send
或 reply.code
来定制错误响应。
fastify.addHook('onRequest', async (request, reply) => { if (!request.headers['authorization']) { reply.code(401).send({ error: 'Unauthorized' }); } });
通过以上方式,你可以在 Fastify 中灵活使用 onRequest
钩子来处理请求的预处理逻辑。