Мне нужно получить доступ к экземпляру 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'
    })
  }
}

Спасибо!

1
HypeWolf 23 Окт 2018 в 04:39

2 ответа

Лучший ответ

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

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'
    })
  }
}
1
Anant Kaushik 13 Ноя 2018 в 14:05

< Сильный > Update :
вы можете использовать ключевое слово 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'
    });
  }
};
0
Milad Abbasi 2 Фев 2020 в 10:17
52939927