【发布时间】:2020-12-05 02:18:33
【问题描述】:
我想将我与单个数据库的 mongoose 连接拆分为两个连接(指向模式的链接:https://mongoosejs.com/docs/connections.html#multiple_connections)
我想要实现的目标是注入两个完全相同的模型,它们将使用不同的连接。
我认为它的工作方式是注册两个MongooseModules:
@Module({
imports: [
MongooseModule.forRootAsync({
useClass: MongooseConfigFast,
}),
MongooseModule.forRootAsync({
useClass: MongooseConfigSlow,
}),
UsersModule,
],
})
export class AppModule {}
其中 MongooseConfigFast 和 MongooseConfigSlow 定义为:
@Injectable()
export class MongooseConfigFast implements MongooseOptionsFactory {
createMongooseOptions():
| MongooseModuleOptions
| Promise<MongooseModuleOptions> {
return {
useNewUrlParser: true,
useUnifiedTopology: true,
uri: "mongodb://localhost:27017/startup",
connectionName: ConnectionNames.FAST, // FAST_CONNECTION
};
}
}
现在在 UsersModule 中,我注册了相同的架构,但为不同的连接提供不同的名称:
@Module({
imports: [
MongooseModule.forFeature(
[
{
name: ConnectionNames.USERS_FAST, // Token for fast connection
schema: UserSchema, // Same User schema
collection: User.name, // Same User collection
},
],
ConnectionNames.FAST,
),
MongooseModule.forFeature(
[
{
name: ConnectionNames.USERS_SLOW, // Token for slow connection
schema: UserSchema, // Same User schema
collection: User.name, // Same User collection
},
],
ConnectionNames.SLOW,
),
],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
最后我可以在 UsersService 中注入两个模型:
@Injectable()
export class UsersService {
@InjectModel(ConnectionNames.USERS_FAST) // Usign token for fast connection
private readonly FUserModel: Model<User>;
@InjectModel(ConnectionNames.USERS_SLOW) // Using token for slow connection
private readonly SUserModel: Model<User>;
public async createUser(userInfo: UserInfoDto): Promise<User> {
return this.SUserModel.create(userInfo);
}
}
当我尝试运行它时,Nest 似乎无法解析在 UsersModule 中注册的猫鼬模型。有人实施了吗?有没有可能?
【问题讨论】: