【发布时间】: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' }) -
StackOverflow cmets 不进行多行格式化。您可以将其添加到您的问题正文而不是评论中吗?
-
我编辑了我的帖子并添加了模块。
标签: javascript node.js typescript nestjs typeorm