admin管理员组文章数量:1325550
Calling 'localhost:3000/contacts' (with or without parameters) at postman returns me this error and i don't know why. My backend is connected to a PostgreSQL db.
TypeError: Cannot read property 'createQueryBuilder' of undefined
at ContactsRepository.Repository.createQueryBuilder (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\typeorm\repository\Repository.js:17:29)
at ContactsRepository.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.repository.js:17:34)
at ContactsService.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.service.js:24:39)
at ContactsController.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.controller.js:25:37)
at ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-execution-context.js:38:29
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-execution-context.js:46:28
at async ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-proxy.js:9:17
My code looks like this:
@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/mon';
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 {}
Somebody know how i can fix this? Regards
Calling 'localhost:3000/contacts' (with or without parameters) at postman returns me this error and i don't know why. My backend is connected to a PostgreSQL db.
TypeError: Cannot read property 'createQueryBuilder' of undefined
at ContactsRepository.Repository.createQueryBuilder (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\typeorm\repository\Repository.js:17:29)
at ContactsRepository.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.repository.js:17:34)
at ContactsService.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.service.js:24:39)
at ContactsController.getContacts (...\Documents\Visual Studio Code Projects\funds-backend-nestjs\dist\contacts\contacts.controller.js:25:37)
at ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-execution-context.js:38:29
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-execution-context.js:46:28
at async ...\Documents\Visual Studio Code Projects\funds-backend-nestjs\node_modules\@nestjs\core\router\router-proxy.js:9:17
My code looks like this:
@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/mon';
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 {}
Somebody know how i can fix this? Regards
Share Improve this question edited Dec 10, 2022 at 14:03 jprofitt 11k4 gold badges37 silver badges46 bronze badges asked Nov 16, 2020 at 7:56 axelhmmaxelhmm 431 gold badge1 silver badge5 bronze badges 7- In a older version i didnt use the alias 'contacts'. Back then I named my entity 'contacts' to fit the table name 'contacts'. Wanted to make it more consistent, because an entity should be singular. It worked. Does it have something to do with it? Because right now i tried it with getManager, and it works again. const query = await getManager().createQueryBuilder(Contact, 'contacts'); github./typeorm/typeorm/blob/master/docs/… – axelhmm Commented Nov 16, 2020 at 8:11
-
Can you also show your
ContactsModule
? – Jay McDoniel Commented Nov 16, 2020 at 18:00 -
I brought it back to working using TypeORM's Connection in the service:
this.contactsRepository = this.connection.getCustomRepository(ContactsRepository);
Still i'm wondering why i am not able to use Dependency Injection anymore. It must be because of the Alias used in the Entity:@Entity({ name: 'contacts' })
– axelhmm Commented Nov 17, 2020 at 7:25 - StackOverflow ments don't do multiline formatting. Can you add it to your question body instead of the ment? – Jay McDoniel Commented Nov 17, 2020 at 7:26
- I edited my post and added the module. – axelhmm Commented Nov 17, 2020 at 7:30
1 Answer
Reset to default 7ContactsRepository
should only be used in the TypeOrmModule.forFeature()
and not added to the providers
or exports
array. When it is added here, the injection token for ContactsRepository
no longer points to the proper instance and Nest creates the class, but doesn't have it properly extend Repository
as that code is all managed by TypeORM
本文标签: javascriptNestJSTypeORM Cannot read property 39createQueryBuilder39 of undefinedStack Overflow
版权声明:本文标题:javascript - NestJSTypeORM: Cannot read property 'createQueryBuilder' of undefined - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742193174a2430592.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论