# प्लगइन और डेकोरेटर — Fastify: High-Performance Node.js APIs बनाना

Source: https://www.skillbyai.com/hi/fastify/ff-plugins

> Reusable plugins और decorators से Fastify बढ़ाएँ जो databases, auth और साझा helpers को encapsulate करते हैं।

## प्लगइन क्या हैं?

Plugins ऐसे async functions हैं जो functionality को encapsulate करते हैं—database clients, authentication, middleware—और routes, decorators, या hooks रजिस्टर करते हैं। वे modular सर्वर design को enable करते हैं।

## Plugin लिखना

एक plugin को Fastify instance और options object मिलता है। इसे `fastify.register(plugin, opts)` से रजिस्टर करें।

```javascript
// plugins/database.js
export default async function dbPlugin(fastify, opts) {
  const db = { getUser: (id) => ({ id, name: 'Alice' }) };
  fastify.decorate('db', db);
}

// server.js
fastify.register(dbPlugin);
fastify.get('/users/:id', async (req, reply) => {
  const user = await fastify.db.getUser(req.params.id);
  return user;
});
```

## Decorators properties जोड़ते हैं

`fastify.decorate()` Fastify instance में एक property जोड़ता है, सभी routes में उपलब्ध। `fastify.decorateRequest()` request object में जोड़ता है, `fastify.decorateReply()` reply में।

## ready() से ordering का इंतज़ार करें

plugins क्रम से asynchronously load होते हैं। tests में decorators use करने से पहले `await app.ready()` करें, वरना वे अभी मौजूद नहीं हो सकते।

त्वरित जाँच

**Quiz:** plugin function को पहले argument में क्या मिलता है?

- [ ] Node का http server
- [x] एक Fastify instance (encapsulated) और options
- [ ] सिर्फ़ options object

*Answer:* एक Fastify instance (encapsulated) और options. signature `(instance, opts)` है, और async न हो तो `done` भी।
