首页 > 解决方案 > 如何在导入的文件中访问 fastify 应用实例

问题描述

我正在开发一个 fastify 驱动的 rest api,并试图将我的代码分成逻辑文件。我有一些类对象导入到我的服务器中,其中定义了 fastify 并发生了 fastify.listen。我不知道如何访问我导入的文件中的 fastify 实例。

应用程序.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()

我想访问导入到 server.js 中的 session.js 中的 fastify 应用程序实例,我尝试了各种方法,例如导入 fastify 并在其中创建应用程序,希望它能够被继承等。任何帮助将不胜感激。

标签: javascriptnode.jsfastify

解决方案


我找到了我需要的信息。在会话和其他人的导入中,我通过导出默认(应用程序)=> 类会话{}导出类

然后在服务器内部我导入它: import SessionsImp from './scripts/sessions.js'

然后通过应用程序传递: const SessionsClass = SessionsImp(app) const Sessions = new SessionsClass()

它看起来很复杂,但它可以按我的意愿工作,然后我可以用我正在加载的会话和其他类来装饰应用程序,并按照我的意愿在路由和插件中使用它们。


推荐阅读