我从两天前开始尝试解决这个问题,也许我只是忽略了这里的重点。
我的目标是编写一个 NestJS 应用程序(包含 TypeORM),它为我的 2 个或 3 个小项目提供 RestAPI,而不是为每个项目编写一个 NestJS-App。
到目前为止一切顺利,该应用程序已准备就绪,适用于单个项目(它们位于具有实体、控制器、服务、模块的子文件夹中),但我无法让它与所有项目一起运行。
重点似乎是配置,我正在使用 ormconfig.json
:
[ {
"name": "Project1",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "<username>",
"password": "<pwd>",
"database": "<database>",
"synchronize": false,
"entities": ["project1/*.entity.ts"],
"subscribers": ["project1/*.subscriber.ts"],
"migrations": ["project1/migrations/*.ts"],
"cli": { "migrationsDir": "project1/migrations" }
}, {
"name": "project2",
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "<another-username>",
"password": "<another-pwd>",
"database": "<another-database>",
"synchronize": false,
"entities": ["project2/*.entity.ts"],
"subscribers": ["project2/*.subscriber.ts"],
"migrations": ["project2/migrations/*.ts"],
"cli": { "migrationsDir": "project2/migrations"
} ]
错误消息说:
[ExceptionHandler] 找不到连接默认值,因为它未在任何 orm 配置文件中定义
当然找不到“default”,因为我提供了两个具有不同于“default”的唯一名称的配置。
在 ApplicationModule 中,我可以提供连接的名称,如下所示:
TypeOrmModule.forRoot( { name: "project1" } ),
但它只适用于一个项目。
我可以将所有内容混合在一个配置中,但随后我会将所有内容都放在一个数据库中,所有用户都是同一个用户,并且可能会混合实体……
有人可以给我提示如何解决这个问题吗?也许在每个模块中都有 getConnection(<name>)
,但是如何启动 ApplicationModule 呢?
亲切的问候,
萨格罗伯特
原文由 sagerobert 发布,翻译遵循 CC BY-SA 4.0 许可协议
我只是尝试使用多个数据库和一个
ormconfig.json
设置 TypeORM,但它对我根本不起作用。它似乎总是使用default
连接,当没有发现默认(= 没有显式名称)连接时,它会抛出相应的错误。虽然当我在
app.module.ts
中定义连接时它确实起作用了(我删除了ormconfig.json
):