js-他のモジュールのサービスでリポジトリとサービスを使用


開発中、既存のサービスを再利用する必要がある場合があります。


しかし,モジュールによる依存性注入がうまくいかなければ,予期せぬエラーが発生する可能性がある.
例を挙げて、どのように行うべきかを理解しましょう.

1.他のモジュールにサービスを注入する


ReviewServiceでレビューを生成する場合は、既存のユーザサービスとGoodsサービスを再利用して、ユーザ情報とGoods情報を取得して格納します.(コメントを生成すると、コメントを作成したユーザー情報と購入した商品情報がロードされ保存されます.)
@Injectable()
export class ReviewService {
  constructor(
    @InjectRepository(ReviewRepository)
    private reviewRepository: ReviewRepository,
    private goodsService: GoodsService,
    private userService: UserService,
  ) {}
  async createReview(createReviewDto: CreateReviewDto) {
    const { goodsId, userId } = createReviewDto;
    const user = await this.userService.getUserInfo(userId);
    console.log(user);
    const goods = await this.goodsService.getGoodsById(goodsId);
    console.log(goods);
    return this.reviewRepository.createReview(createReviewDto, goods, user);
  }
}
コンストラクション関数の部分は,使用したいサービスとrepositoryの依存性をrepositoryに注入する部分である.
ただし、サービスとリポジトリは使用できません.
Nest.jsはモジュール単位でアプリケーションを管理するため、モジュールからアプリケーションを個別にインポートおよびエクスポートする必要があります.
まず,各モジュールにユーザサービスと商品サービスを出力する.
//UserModule
@Module({
  imports: [
    TypeOrmModule.forFeature([UserRepository]),
  ],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService],
})
export class UserModule {}
//GoodsModule
@Module({
  imports: [TypeOrmModule.forFeature([GoodsRepository])],
  controllers: [GoodsController],
  providers: [GoodsService],
  exports: [GoodsService],
})
export class GoodsModule {}
各モジュールはexports配列から必要なサービスをエクスポートできます.
(ここで、ユーザサービスとゴールドサービスは、それぞれユーザレポートとゴールドレポートを介してデバイスデータにアクセスする.)
エクスポート操作が完了したら、インポート操作を開始しましょう.
//ReviewModule
@Module({
  imports: [
    UserModule,
    GoodsModule,
    TypeOrmModule.forFeature([
      ReviewRepository,
    ]),
  ],
  controllers: [ReviewController],
  providers: [ReviewService, GoodsService, UserService],
})
export class ReviewModule {}
コメントを生成するコードを直接実行すると、エラーが発生します.
何か問題がありますか.GoodsServiceとUserServiceで使用されているレコードライブラリをエクスポートするためです.

2.他モジュールのライブラリへの注入


上記のモジュールでエクスポートおよびインポートする場合は、repositoryおよびインポートタスクがエクスポートおよび追加されていることを確認します.
上のコードでexportsにタイプOrmModuleを追加すると、ライブラリのエクスポート操作が完了します.
//UserModule
@Module({
  imports: [
    EmailModule,
    AuthModule,
    TypeOrmModule.forFeature([UserRepository]),
  ],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {}
//GoodsModule
@Module({
  imports: [TypeOrmModule.forFeature([GoodsRepository])],
  controllers: [GoodsController],
  providers: [GoodsService],
  exports: [GoodsService,TypeOrmModule],
})
export class GoodsModule {}

ReviewModuleのインポート・タスクを追加します
importsのTypeOrmModule.forFeatureスキームにrepositoryを追加しましょう
//ReviewModule
@Module({
  imports: [
    UserModule,
    GoodsModule,
    TypeOrmModule.forFeature([
      ReviewRepository,
      UserRepository,
      GoodsRepository,
    ]),
  ],
  controllers: [ReviewController],
  providers: [ReviewService, GoodsService, UserService],
})
export class ReviewModule {}
上記の手順と同様に、他のモジュールのサービスとリポジトリを注入して再使用できます.
リファレンスリンク