Как получить доступ к экземпляру приложения fastify внутри импортированного файла

Я работаю над API для отдыха с поддержкой fastify и пытаюсь разделить свой код на логические файлы. У меня есть несколько объектов класса, которые я импортирую на свой сервер, где определено fastify и происходит fastify.listen. Чего я не могу понять, так это того, как получить доступ к экземпляру fastify внутри файла, который я импортирую.

app.js

import fastify from 'fastify'
import autoload from 'fastify-autoload'
import { join } from 'desm'

export default function (opts) {
  const app = fastify(opts)

  app.register(autoload, {
    dir: join(import.meta.url, 'routes')
  })

  return app
}
server.js

import createApp from './app.js'
import 'dotenv/config.js'
import Sessions from './scripts/sessions.js'

import emitter from 'central-event'
async function start () {
  const app = createApp({ logger: true })

  await app.listen(process.env.PORT || 3000, process.env.IP || '0.0.0.0')
  const intervalSeconds = process.env.intervalSeconds * 1000
  setInterval(function () {
    emitter.emit('heartbeat')
  }, intervalSeconds)
}

start()

Я хочу получить доступ к экземпляру приложения fastify внутри session.js, который импортирован в server.js. Я пробовал разные вещи, такие как импорт fastify и создание там приложения, надеясь, что оно будет унаследовано и т. д. Буду признателен за любую помощь.


person teknogk    schedule 24.12.2020    source источник
comment
Почему Sessions никак не используется?   -  person Manuel Spigolon    schedule 26.12.2020
comment
Это был не тот вопрос, который я задавал, почему это не важно. Моя точка зрения заключалась в том, как мне получить доступ/передать его в импортированный файл, чтобы я мог.   -  person teknogk    schedule 27.12.2020


Ответы (1)


Я нашел нужную мне информацию. Внутри импорта для сеансов и других я экспортирую класс через экспорт по умолчанию (приложение) => сеансы класса {}

затем внутри сервера я импортирую его: импортируйте SessionsImp из './scripts/sessions.js'

затем передайте приложение через: const SessionsClass = SessionsImp(app) const Sessions = new SessionsClass()

Это кажется запутанным, но это работает так, как я хочу, тогда я могу украсить приложение сессиями и другими классами, которые я загружаю, и использовать их внутри маршрутов и плагинов, как я хочу.

person teknogk    schedule 27.12.2020