TypeError:存储库方法不是函数(NestJS / TypeORM)

Posted

技术标签:

【中文标题】TypeError:存储库方法不是函数(NestJS / TypeORM)【英文标题】:TypeError: Repository method is not a function (NestJS / TypeORM) 【发布时间】:2020-07-01 18:29:08 【问题描述】:

我正在使用 NestJS 和 TypeORM。尝试调用存储库的 createMailLogEntry 方法时,出现以下错误:TypeError: this.mailLogEntryRepository.createMailLogEntry is not a function

我不知道出了什么问题。

ma​​iling.service.ts

@Injectable()
export class MailingService 

    constructor(@InjectRepository(MailLogEntryRepository) private mailLogEntryRepository: MailLogEntryRepository)  

        // ...

        if(transferResult) 
            await this.mailLogEntryRepository.createMailLogEntry(
                creationDate: new Date(Date.now()),
                from: mailContent.from,
                to: mailContent.to,
                subject: mailContent.subject,
                text: mailContent.text,
                html: mailContent.html,
                cc: mailContent.cc,
                bcc: mailContent.bcc,
            );
        
    

ma​​il-log-entry.repository.ts

@EntityRepository(MailLogEntry)
export class MailLogEntryRepository extends Repository<MailLogEntry> 

    async createMailLogEntry(mailLogEntryDto: MailLogEntryDto): Promise<MailLogEntry> 
        const mailLogEntry = MailLogEntryRepository.createMailLogEntryFromDto(mailLogEntryDto);
        return await mailLogEntry.save();
    

    private static createMailLogEntryFromDto(mailLogEntryDto: MailLogEntryDto): MailLogEntry 
        const mailLogEntry = new MailLogEntry();
        mailLogEntry.from = mailLogEntryDto.from;
        mailLogEntry.to = mailLogEntryDto.to;
        mailLogEntry.subject = mailLogEntryDto.subject;
        mailLogEntry.text = mailLogEntryDto.text;
        mailLogEntry.html = mailLogEntryDto.html;
        mailLogEntry.cc = mailLogEntryDto.cc;
        mailLogEntry.bcc = mailLogEntryDto.bcc;

        return mailLogEntry;
    

【问题讨论】:

可能您在如何提供此自定义存储库时遇到问题,并且您的邮件服务在 mailLogEntryRepository 的位置未定义 【参考方案1】:

我也遇到过这个问题。 确保将存储库导入到模块中。

你的模块应该是这样的。

@Module(
  imports: [TypeOrmModule.forFeature([TeamRepository])],
  providers: [TeamService],
  controllers: [TeamController]
)
export class TeamModule 

【讨论】:

【参考方案2】:

我遇到了同样的问题,如果它可以帮助其他人,我会告诉你是什么让我摆脱了它!

如果您的存储库是手工制作的(不是由 ORM 生成的),那么您不能使用存储库注入:

而是像使用服务一样使用存储库(只需删除 @InjectRepository(People)):

我希望这会有所帮助!编码愉快!

PS : Personnes 是我的实体,帮手与问题无关

【讨论】:

【参考方案3】:

也许这也有帮助,它与@Simple Dev 关于手工存储库的回答有关。例如,如果您创建一个具有不同名称的 Entity、Service 和 Repositoy 类,那么当您尝试从服务调用存储库成员函数时可能会未定义。例如:

@Entity
export class Person  ... 

@Injectable()
export class OtherPersonService  ...   // Person !== OtherPerson

@EntityRepository(Person)
export class OtherPersonRepository extends Repository<Person>  ...  // Same problem

我也遇到了这个问题,重命名我的服务和存储库后,错误消失了。对于前面的示例,解决方案是:PersonPersonServicePersonRepository

【讨论】:

【参考方案4】:

对我来说,我已经将实体和该实体的自定义存储库一起导入了。

@Module(
  imports: [TypeOrmModule.forFeature([
  TeamRepository,
  Team   // either the entity or the custom repository should be imported.
  ])],
  providers: [TeamService],
  controllers: [TeamController]
)
export class TeamModule 

【讨论】:

以上是关于TypeError:存储库方法不是函数(NestJS / TypeORM)的主要内容,如果未能解决你的问题,请参考以下文章

ERROR:TypeError: $(...).selectpicker 不是使用 requirejs 的函数加载库

nodejs-dialogflow 库返回 TypeError: dialogflow.SessionsClient 不是构造函数

TypeError:中间件不是存储中的函数

如何修复“TypeError:fsevents 不是构造函数”反应错误

使用 React 测试库模拟上下文提供程序时出现“TypeError:react.useContext 不是函数”

TypeError:list.map 不是函数