使用路由文件和存储库模式时未找到 TypeORM 连接 "default"

TypeORM Connection "default" was not found when using a routes file and repository pattern

我有一个使用 TypeORM 的 TS 项目。我正在使用存储库模式,所以我有层:控制器 -> 服务 -> 存储库。

Controller 构造函数初始化 Service class,后者初始化 Repository class,其中构造函数是:

constructor(){
    this.ormRepository = getRepository(TypeormEntity)
}

当我像这样在 index.ts 中创建路由时,这工作正常:

createConnection().then(() => {
  const controller = new MyController()
  app.get('/', controller.getSomething);
})

连接已创建,然后我使用 new MyController().

初始化 class

问题是当我想在另一个文件中获取路由时。我想得到这个结构文件夹:

src
 |--> index.ts
 |--> routes 
      |--> v1
           |--> router.ts
           |--> value
                 |--> value.route.ts
      |--> v2
           |--> ...

因此,要实现这一点,index.ts 导入路由。但问题是,随着导入完成,MyController()构造函数被执行,执行失败。

所以我想在index.ts

中有这样的东西
import * as express from 'express'
import { createConnection } from "typeorm";
import Router from './routes/v1/router'

const app = express()
createConnection().then(() => {
  app.use('/', Router)
  app.listen(port)
})

此外,在导入调用之后,routes/v1 中的文件 router.ts 是:

import { json, Router } from 'express'
import valueRouter from './value/value.route'

const router = Router()
router.use(json())
router.use('/value', valueRouter)

export default router

这是根据它们调用的资源为所有路由添加“前缀”。

value.route.ts是控制器初始化失败的地方。

import { Router } from "express";
import ValueController from '../../../controller/value.controller'

const router = Router()
const vc = new ValueController()
router.get('/',vc.getSomething)

export default router

我已经测试过删除构造函数并且项目初始化正常,所以问题是跨控制器和服务的存储库初始化。

我怎样才能做到这一点?

提前致谢。

最后我使用动态导入解决了我自己的问题。

现在我的 index.ts 看起来像这样:

createConnection().then(() => {
  import('./routes/v1/router').then((router: any) => {
    app.use('/', router.default)
    app.listen(port)
  })
})

我认为这比在该文件中添加所有路由要干净得多。在外部文件中调用路由我可以管理大量并保持干净的结构。