author.module.ts
@Module({
imports: [
forwardRef(() => ArticleModule),
MongooseModule.forFeature([{ name: Author.name, schema: AuthorSchema }]),
],
controllers: [AuthorController],
providers: [AuthorService, AuthorsRepository, UtilService],
exports: [AuthorService],
})
export class AuthorModule {}
article.module.ts
@Module({
imports: [
forwardRef(() => AuthorModule),
CityModule,
// BookmarkModule,
MongooseModule.forFeature([{ name: Article.name, schema: ArticleSchema }]),
],
controllers: [ArticleController],
providers: [ArticleService, ArticlesRepository],
})
export class ArticleModule {}
author.schema.ts (partial file)
@Schema(DefaultSchemaConfig)
export class Author extends BaseSchema {
@ApiPropertyOptional()
@IsString()
@Prop()
name?: string;
@ApiPropertyOptional({ type: ArticleRefDto, isArray: true })
@IsArray()
@Prop({ type: [{ type: MongooseSchema.Types.ObjectId, ref: 'Article' }] })
articles?: ArticleRefDto[];
}
export type AuthorDoc = Author & Document;
export const AuthorSchema = SchemaFactory.createForClass(Author);
article.schema.ts
@Schema(DefaultSchemaConfig)
export class Article extends BaseSchema {
@ApiProperty()
@IsString()
@Prop({ required: true })
title!: string;
@ApiPropertyOptional({ type: AuthorRefDto })
@Prop({
type: MongooseSchema.Types.ObjectId,
ref: 'Author',
index: true,
sparse: true,
})
author?: AuthorRefDto;
}
export type ArticleDoc = Article & Document;
export const ArticleSchema = SchemaFactory.createForClass(Article);
I need to reference articledto in author schema and vice versa. But it forms a circular dependency in it and throws the error
class ArticleDto extends article_schema_1.Article {
^
TypeError: Class extends value undefined is not a constructor or null
I tried the forward-Referencing but it doesnt work still shows the same error. I have tried the simple ref method in the schema without forwardref still throws the same error.
I need to do double mapping in both the schemas and tried every possible solution i could find. Let me know if you need more information for the solution