我需要在我的用户模型上有一个预保存挂钩。下面是我的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中删除参数,它将按预期工作。
我做错了什么?
1条答案
按热度按时间svmlkihl1#
您正在尝试在
UserService
和UserModel
之间建立循环依赖关系。那是行不通的根据保存前要做的事情,您可能可以将功能抽象为一个单独的模块和服务,并在forFeatureAsync
中使用 that,只是不要忘记导入新模块