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
我不知道出了什么问题。
mailing.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,
);
mail-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
我也遇到了这个问题,重命名我的服务和存储库后,错误消失了。对于前面的示例,解决方案是:Person、PersonService 和 PersonRepository。
【讨论】:
【参考方案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:fsevents 不是构造函数”反应错误