intermediate

Fastify plugins

Объясняйте plugin encapsulation, decorators, hooks, registration order, dependency declaration и reusable service boundaries.

Fastify plugins инкапсулируют routes, decorators и hooks в scope. `fastify-plugin` оборачивает plugins для корректного распространения decorators и hooks и сохранения metadata через encapsulation boundaries.

					async function usersPlugin(fastify) {
  fastify.decorate('usersService', new UsersService());
  fastify.get('/users/:id', async (req) => {
    return fastify.usersService.find(req.params.id);
  });
}

app.register(usersPlugin, { prefix: '/api' });
				

Порядок регистрации важен: зависимости через `dependencies: ['other-plugin']`. Encapsulation — child plugins не видят parent decorators, пока `fastify-plugin` намеренно не разрывает цепочку.

На интервью: encapsulation plugins vs глобальный Express middleware, `decorate` для shared services, lifecycle hooks (`onRequest`, `preHandler`, `onResponse`).

Типовые ошибки: plugins без `fastify-plugin` при необходимости shared decorators, circular plugin dependencies, неверный async boot.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Plugin на границу фичи.
  • fastify-plugin для shared decorators.
  • Явные dependencies между plugins.
  • prefix для URL namespacing.