将 InterfaceRepo 注入服务

问题描述 投票:0回答:1

我在大学里有 Nestjs 的项目 这是我第一次使用nest 所以我在将用户存储库注入 userService 时遇到问题 我创建基本回购接口 base.interface.repository.ts 是从文档扩展而来的

import { Document, Model } from 'mongoose';

export interface BaseInterfaceRepository<T extends Document> {
  create(data: Partial<T>): Promise<T>;

  findAll(): Promise<T[]>;

  findById(id: string): Promise<T | null>;

  update(id: string, data: Partial<T>): Promise<T | null>;

  delete(id: string): Promise<T|null>;

}

我有抽象类 基础.抽象.存储库

import { Model, Document, model, Error, Promise } from "mongoose";
import { BaseInterfaceRepository } from "./base.interface.repository";
import { filter } from "rxjs";

export abstract class BaseAbstractRepository<T extends Document> implements  BaseInterfaceRepository<any>{
  protected model: Model<T>;

  constructor(model: Model<T>) {
    this.model = model;
  }

  findAll(): Promise<any[]> {
        throw new Error('Method not implemented.');
    }


  async create(data: Partial<T>): Promise<T> {
    return await this.model.create(data);
  }

  async findById(id: string): Promise<T | null> {
    return await this.model.findById(id).exec();
  }

  async findOne(filter: any): Promise<T | null> {
    return await this.model.findOne(filter).exec();
  }

  async find(filter: any): Promise<T[]> {
    return await this.model.find(filter).exec();
  }

  async update(id: string, data: Partial<T>): Promise<T | null> {
    return await this.model.findByIdAndUpdate(id, data, { new: true }).exec();
  }

  async delete(id: string): Promise<T|null> {
    const result = await this.model.findByIdAndDelete(id);
    return await result;
  }


}

所以我有 user.repository.interface.ts

import { User } from 'src/Schema/User.Schema';
import { BaseInterfaceRepository } from "../../../repositories/Base/base.interface.repository";

export interface UserRepositoryInterface extends BaseInterfaceRepository<User> {


}

我有 User.repository.ts,它是从 BaseAbstractRepository 扩展的,它实现了 UserRepositoryIterface

import { Injectable } from '@nestjs/common';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { BaseAbstractRepository } from '../../../repositories/Base/base.abstract.repository';
import { User,  } from 'src/Schema/User.Schema';
import { UserRepositoryInterface } from "./user.repository.interface";


@Injectable()
export  class UserRepository extends BaseAbstractRepository<User> implements UserRepositoryInterface {

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


}

问题是当我尝试将 UserRepositoryInterface 注入 userService 时 给我这个错误 这是我的 UserService

import { Inject, Injectable, forwardRef } from '@nestjs/common';
import { UserRepositoryInterface } from "./UserRepo/user.repository.interface";
import { UserRepository } from "./UserRepo/user.repository";
import { User } from "../../Schema/User.Schema";

@Injectable()
export class UserService {
  constructor(@Inject('UserRepositoryInterface') private readonly repo: UserRepositoryInterface) {}

}

我尝试在 UserModule.ts 中添加 userRepositoryInetafce 的提供者

import { Module } from '@nestjs/common';
import { UserService } from "./user.service";
import { UsersController } from "../../Controllers/user.controller";
import { UserRepository } from "./UserRepo/user.repository";
import {UserRepositoryInterface} from "./UserRepo/user.repository.interface";

@Module({

imports:[],
  controllers: [UsersController],

  providers: [
    UserService,
    {
      provide: 'UserRepositoryInterface',
      useClass: UserRepository,
    },
  ]

})
export class UserModule {}

我在应用程序模型中导入用户模型 像这样

import { Module } from '@nestjs/common';
import { MongooseModule } from "@nestjs/mongoose";
import { MongoDataServiceModule } from './Config/Mongo/mongo-data-service.module';
import { UserService } from './uses-case/User/user.service';
import { UserModule } from './uses-case/User/user.module';
import { UserRepository } from "./uses-case/User";
import { BaseAbstractRepository } from './repositories/Base';
import {BaseInterfaceRepository} from "./repositories/Base";

@Module({
  imports: [
    MongoDataServiceModule,
    UserModule,
    ,
  ],
  controllers: [],
  providers: [




  ],
})
export class AppModule {}

但没有成功

[Nest] 7576 - 02/14/2024, 10:03:05 PM 错误 [ExceptionHandler] Nest 无法创建 AppModule 实例。 AppModule“imports”数组索引 [2] 处的模块未定义。

潜在原因:

范围[] 错误:Nest 无法创建 AppModule 实例。 AppModule“imports”数组索引 [2] 处的模块未定义。

mongodb nestjs backend
1个回答
0
投票

看起来 AppModule 中的导入中 UserModule 之后有一些东西。尝试删除仅包含逗号的行,并让我们知道它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.