使用路由文件和存储库模式时未找到 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)
})
})
我认为这比在该文件中添加所有路由要干净得多。在外部文件中调用路由我可以管理大量并保持干净的结构。
我有一个使用 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()
.
问题是当我想在另一个文件中获取路由时。我想得到这个结构文件夹:
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)
})
})
我认为这比在该文件中添加所有路由要干净得多。在外部文件中调用路由我可以管理大量并保持干净的结构。