繁体   English   中英

使用路由文件和存储库模式时未找到 TypeORM 连接“默认”

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

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

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)
})

此外,在 import 调用之后, 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是 controller 初始化失败的地方。

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

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

export default router

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

我怎样才能做到这一点?

提前致谢。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM