पाठ 13 / 32
Lifecycle Hooks
onRequest, preHandler और onSend जैसे lifecycle बिंदुओं पर globally या per route code चलाएँ।
Fastify में Hook points
हर request पर hooks इस क्रम में चलते हैं: onRequest, preParsing, preValidation, preHandler, फिर preSerialization, onSend और onResponse। उन्हें middleware-जैसे logic के लिए उपयोग करें।
सामान्य hooks
Globally या per-route hooks रजिस्टर करें। वे sequence में चलते हैं और request/response को modify कर सकते हैं।
// Global hook: log every request
fastify.addHook('onRequest', async (request) => {
request.startTime = Date.now();
request.log.info(`${request.method} ${request.url}`);
});
// Global hook: add timing header
fastify.addHook('onSend', async (request, reply, payload) => {
reply.header('X-Response-Time', `${Date.now() - request.startTime}ms`);
return payload;
});
// Per-route hook: validate auth token
fastify.get('/admin',
{ onRequest: async (req, reply) => {
const token = req.headers.authorization;
if (!token) return reply.status(401).send({ error: 'Unauthorized' });
}},
async () => ({ message: 'Admin access granted' })
);त्वरित जाँच
त्वरित जाँच: कौन-सा hook validation के बाद लेकिन handler से पहले चलता है?
- preHandler
- onRequest
- preValidation
- onSend
Answer
preHandler — preHandler validation के बाद और route handler से पहले चलता है। इसे auth checks या last-minute data preparation के लिए उपयोग करें।
onRequest hook
hooks lifecycle के तय बिंदुओं पर चलते हैं।
onRequestसबसे पहले चलता है, body parse होने से पहले।asyncमें सिर्फ़ return करें, या callback style मेंdone()call करें, दोनों नहीं।- यहाँ header न होने पर request reject होती है।
const fastify = require('fastify')();
fastify.addHook('onRequest', async (request, reply) => {
if (!request.headers['x-api-key']) {
reply.code(401).send({ error: 'missing key' });
}
});
fastify.get('/', async () => ({ ok: true }));
fastify.listen({ port: 3000 });त्वरित जाँच
त्वरित जाँच: body parse होने से पहले कौन सा hook चलता है?
- preHandler
- onRequest
- onSend
Answer
onRequest — क्रम: onRequest, preParsing, preValidation, preHandler। body preValidation से उपलब्ध होती है।