NestJS/TypeORM:无法读取未定义的属性“createQueryBuilder”
Posted
技术标签:
【中文标题】NestJS/TypeORM:无法读取未定义的属性“createQueryBuilder”【英文标题】:NestJS/TypeORM: Cannot read property 'createQueryBuilder' of undefined 【发布时间】:2021-02-27 10:25:06 【问题描述】:在邮递员处调用“localhost:3000/contacts”(带或不带参数)返回此错误,我不知道为什么。我的后端连接到 PostgreSQL 数据库。
TypeError:无法读取未定义的属性“createQueryBuilder” 在 ContactsRepository.Repository.createQueryBuilder (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\typeorm\repository\Repository.js:17:29) 在 ContactsRepository.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.repository.js:17:34) 在 ContactsService.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.service.js:24:39) 在 ContactsController.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.controller.js:25:37) 在 ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules@nestjs\core\router\router-execution-context.js:38:29 在 processTicksAndRejections (internal/process/task_queues.js:93:5) 在异步 ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules@nestjs\core\router\router-execution-context.js:46:28 在异步 ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules@nestjs\core\router\router-proxy.js:9:17
我的代码如下所示:
@EntityRepository(Contact)
export class ContactsRepository extends Repository<Contact>
async getContacts(filterDto: GetContactsFilterDto): Promise<Contact[]>
const name, search = filterDto;
// const query = this.createQueryBuilder('contacts');
const query = await this.createQueryBuilder()
.select('contacts')
.from(Contact, 'contacts');
if (name)
query.andWhere('contacts.name = :name', name );
if (search)
query.andWhere(
'(contacts.email LIKE :search OR contacts.telephone LIKE :search)',
search: `%$search%` ,
);
const contacts = await query.getMany();
return contacts;
import BaseEntity, Column, Entity, PrimaryGeneratedColumn from 'typeorm';
@Entity( name: 'contacts' )
export class Contact extends BaseEntity
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
email: string;
@Column()
html_de: string;
@Column()
html_en: string;
@Column()
name: string;
@Column()
telephone: string;
export class ContactsController
constructor(private contactsService: ContactsService)
@Get()
getContacts(
@Query(ValidationPipe) filterDto: GetContactsFilterDto,
): Promise<ContactDto[]>
return this.contactsService.getContacts(filterDto);
@Injectable()
export class ContactsService
constructor(
@InjectRepository(ContactsRepository)
private contactsRepository: ContactsRepository,
)
async getContacts(filterDto: GetContactsFilterDto): Promise<Contact[]>
return this.contactsRepository.getContacts(filterDto);
import Module from '@nestjs/common';
import TypeOrmModule from '@nestjs/typeorm';
import ContactsController from './contacts.controller';
import ContactsRepository from './contacts.repository';
import ContactsService from './contacts.service';
@Module(
controllers: [ContactsController],
imports: [TypeOrmModule.forFeature([ContactsRepository])],
providers: [ContactsRepository, ContactsService],
exports: [ContactsRepository, ContactsService],
)
export class ContactsModule
有人知道我该如何解决这个问题吗?问候
【问题讨论】:
在旧版本中,我没有使用别名“联系人”。那时我将我的实体命名为“联系人”以适合表名“联系人”。想让它更加一致,因为实体应该是单数的。有效。它与它有关系吗?因为现在我用 getManager 尝试了它,它又可以工作了。 const query = await getManager().createQueryBuilder(Contact, 'contacts'); github.com/typeorm/typeorm/blob/master/docs/… 你也可以显示你的ContactsModule
吗?
我在服务中使用 TypeORM 的连接使其恢复工作:this.contactsRepository = this.connection.getCustomRepository(ContactsRepository);
我仍然想知道为什么我不能再使用依赖注入了。一定是因为Entity中使用的别名:@Entity( name: 'contacts' )
*** cmets 不进行多行格式化。您可以将其添加到您的问题正文而不是评论中吗?
我编辑了我的帖子并添加了模块。
【参考方案1】:
ContactsRepository
只能在TypeOrmModule.forFeature()
中使用,而不应添加到providers
或exports
数组中。在此处添加时,ContactsRepository
的注入令牌不再指向正确的实例,Nest 创建了该类,但没有正确扩展 Repository
,因为该代码全部由 TypeORM 管理
【讨论】:
以上是关于NestJS/TypeORM:无法读取未定义的属性“createQueryBuilder”的主要内容,如果未能解决你的问题,请参考以下文章
NestJS TypeORM MongoDB 无法使用 find 或 FindOne 搜索存储库
NestJS / TypeOrm / Neo4j :Nest 无法解析 NEO4J_DRIVER 的依赖关系