Как получить доступ к экземпляру fastify из файла обработчика / контроллера?

Мне нужно получить доступ к экземпляру fastify из файла обработчика. Я совсем не помню, как мне это делать.

индекс:

fastify.register(require('./routes/auth'), {
  prefix: '/auth'
})

маршруты / авт:

module.exports = function(fastify, opts, next) {
  const authHandler = require('../handlers/auth')
  fastify.get('/', authHandler.getRoot)
  next()
}

Обработчик / аутентификации:

module.exports = {
  getRoot: (request, reply) {
    // ACCESS FASTIFY NAMESPACE HERE
    reply.code(204).send({
      type: 'warning',
      message: 'No content'
    })
  }
}

Спасибо!

4 ответа

Решение

Маршруты / авт:

module.exports = function(fastify, opts, next) {
  const authHandler = require('../handlers/auth')(fastify)
  fastify.get('/', authHandler.getRoot)
  next()
}

Обработчик / аутентификации:

module.exports = function (fastify) {
  getRoot: (request, reply) {
    fastify;
    reply.code(204).send({
      type: 'warning',
      message: 'No content'
    })
  }
}

fastify.decorateRequest('fastify', fastify); Теперь вернет предупреждающее сообщение:

      FastifyDeprecation: You are decorating Request/Reply with a reference type. This reference is shared amongst all requests. Use onRequest hook instead. Property: fastify

Вот обновленное использование ловушки OnRequest для запросов:

      fastify.decorateRequest('fastify', null)    
fastify.addHook("onRequest", async (req) => {
        req.fastify = fastify;
}); 

Замените onRequest на onReply, если это необходимо для ответов. См. Документацию по Fastify здесь.

Обновление:
вы можете использоватьthis ключевое слово для доступа к экземпляру fastify в ваших контроллерах, которые определены с functionключевое слово. Контроллеры стрелочных функций не работают.

Вы также можете украсить экземпляр fastify по объекту запроса или ответа:

index:

fastify.decorateRequest('fastify', fastify);
// or
fastify.decorateReply('fastify', fastify);

fastify.register(require('./routes/auth'), {
  prefix: '/auth'
});

Тогда в вашем handler/auth:

module.exports = {
  getRoot: (request, reply) {
    // ACCESS FASTIFY NAMESPACE HERE
    request.fastify
    // or
    reply.fastify

    reply.code(204).send({
      type: 'warning',
      message: 'No content'
    });
  }
};

Это было добавлено по умолчанию

      module.exports = { getRoot: (request, reply) {
// ACCESS FASTIFY NAMESPACE HERE
const fastify = request.server; 
/* The Fastify server instance, scoped to the current encapsulation context */
reply.code(204).send({
  type: 'warning',
  message: 'No content'
})}}

Ссылка: https://www.fastify.io/docs/latest/Reference/Request/

Другие вопросы по тегам