typescript 服务的NestJS依赖注入在MongooseModule.forFeatureAsync调用中失败

jckbn6z7  于 2023-06-24  发布在  TypeScript
关注(0)|答案(1)|浏览(117)

我需要在我的用户模型上有一个预保存挂钩。下面是我的users.module.ts

@Module({
  controllers: [
    UsersController,
  ],
  exports: [
    UsersService,
  ],
  providers: [
    UsersService,
  ],
  imports: [
    forwardRef(() => AuthModule),
    MongooseModule.forFeatureAsync([
      {
        name: User.name,
        useFactory: (usersService: UsersService) => {
          const schema = UserSchema;

          schema.pre('save', async function(next) {
            // ... more code

            next();
          });

          return schema;
        },
        inject: [UsersService],
      }
    ]),
  ]
})
export class UsersModule {}

但是,我收到一个错误,指出:
Nest无法解析UserModel(DatabaseConnection、?)。请确保索引[1]处的参数UsersService在MongooseModule上下文中可用。
可能的解决方案:

  • MongooseModule是一个有效的NestJS模块吗?
  • 如果UsersService是一个提供者,它是当前MongooseModule的一部分吗?
  • 如果UsersService是从一个单独的@Module导出的,那么该模块是否在MongooseModule中导入?@Module({ imports:[ /* 包含UsersService的模块 */ ] })

错误:嵌套无法解析UserModel(DatabaseConnection,?)。请确保索引[1]处的参数UsersService在MongooseModule上下文中可用。
用户服务,减去方法和导入是:

@Injectable()
export class UsersService {

  constructor(
    @InjectModel(User.name)
    private readonly userModel: Model<User>,
  ) {}

}

如果我删除forFeatureAsync并将其替换为forFeature,则一切都按预期工作。
如果我删除inject: [UsersService]并从useFactory中删除参数,它将按预期工作。
我做错了什么?

svmlkihl

svmlkihl1#

您正在尝试在UserServiceUserModel之间建立循环依赖关系。那是行不通的根据保存前要做的事情,您可能可以将功能抽象为一个单独的模块和服务,并在forFeatureAsync中使用 that,只是不要忘记导入新模块

相关问题