node.js - NestJS - 每个模块使用多个 MongoDB 连接
问题描述
有没有办法连接每个模块的多个 MongoDB 连接?
app.module.ts
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/masterDB'),
UserModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
同样,我们可以在另一个模块中定义另一个连接,它是 app.module 的子模块吗?
子模块.ts
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/childDB'),
MongooseModule.forFeature([{ name: 'child', schema: ChildSchema }]),
],
controllers: [ChildController],
providers: [ChildService],
})
export class ChildModule { }
或任何其他方式一次访问不同的数据库。
提前致谢!
解决方案
您必须手动执行此操作,您必须使用提供程序文件:
猫鼬.providers.ts
import * as mongoose from 'mongoose';
export const mongooseProviders = [
{
provide: 'MASTER_CONNECTION',
useFactory: (): Promise<typeof mongoose> =>
// This mongoose.connect never working for multples DB connection
// mongoose.connect('mongodb://localhost/masterDB'),
// Following is working fine and tested by me
mongoose.createConnection('mongodb://localhost/masterDB'),
},
{
provide: 'CHILD_CONNECTION',
useFactory: (): Promise<typeof mongoose> =>
// This mongoose.connect never working for multples DB connection
// mongoose.connect('mongodb://localhost/masterDB'),
// Following is working fine and tested by me
mongoose.createConnection('mongodb://localhost/ChildDB'),
},
];
mongoose.module.ts
import { Module } from '@nestjs/common';
import { mongooseProviders } from './mongoose.providers';
@Module({
providers: [...mongooseProviders],
exports: [...mongooseProviders],
})
export class MongooseModule {}
模型.providers.ts
import { Connection } from 'mongoose';
import { ChildSchema } from './schemas/child/child.schema';
import { MasterSchema } from './schemas/master/master.schema';
export const modelProviders = [
{
provide: 'CHILD_MODEL',
useFactory: (connection: Connection) => connection.model('Child', ChildSchema),
inject: ['CHILD_CONNECTION'],
},
{
provide: 'MASTER_MODEL',
useFactory: (connection: Connection) => connection.model('Master', MasterSchema),
inject: ['MASTER_CONNECTION'],
},
];
在构造函数上而不是使用@InjectModel 你使用@Inject:
@Injectable
export Class ModelService {
constructor(@Inject('MASTER_MODEL') private masterModel: Model<Master>) {}
...
注意:在您提供服务的模块中,您应该导入 MongooseModule 并将其作为提供者 modelProviders。
推荐阅读
- python - 使用 xpath 提取表列值,不包括
- spring - Spring Boot 弹性搜索
- python - pd.df 基于列表中值的布尔掩码
- excel - 使用 Xor 运算符对继承代码的反馈
- apache-kafka - 使用 Kafka 部署 Hyperledger Fabric
- java - 无法在返回导航时维护 Firestore RecyclerView 状态
- ios - 查找手机的公共 IP 地址,以便通过 SSH 连接到 EC2 服务器
- javascript - Vue JS:在组件的组件内传递道具
- swift - 使用 DispatchGroup 在 for-in 循环中处理异步回调仅在所有循环成功时才有效
- ros - 华硕 xtion pro 现场使用 visp_auto_tracker