Как получить доступ к экземпляру 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/