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 {}
上記の手順と同様に、他のモジュールのサービスとリポジトリを注入して再使用できます.リファレンスリンク
Reference
この問題について(js-他のモジュールのサービスでリポジトリとサービスを使用), 我々は、より多くの情報をここで見つけました https://velog.io/@jonghyun3668/Nestjs-다른-모듈의-서비스에서-리포지토리-서비스-사용하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol