Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
83
rated 0 times [  85] [ 2]  / answers: 1 / hits: 7962  / 4 Years ago, mon, november 16, 2020, 12:00:00

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 (...DocumentsVisual Studio Code Projectsfunds-backend-nestjsnode_modulestypeormrepositoryRepository.js:17:29)
at ContactsRepository.getContacts (...DocumentsVisual Studio Code Projectsfunds-backend-nestjsdistcontactscontacts.repository.js:17:34)
at ContactsService.getContacts (...DocumentsVisual Studio Code Projectsfunds-backend-nestjsdistcontactscontacts.service.js:24:39)
at ContactsController.getContacts (...DocumentsVisual Studio Code Projectsfunds-backend-nestjsdistcontactscontacts.controller.js:25:37)
at ...DocumentsVisual Studio Code Projectsfunds-backend-nestjsnode_modules@nestjscorerouterrouter-execution-context.js:38:29
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async ...DocumentsVisual Studio Code Projectsfunds-backend-nestjsnode_modules@nestjscorerouterrouter-execution-context.js:46:28
at async ...DocumentsVisual Studio Code Projectsfunds-backend-nestjsnode_modules@nestjscorerouterrouter-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/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 {}

Somebody know how i can fix this? Regards


More From » node.js

 Answers
3

ContactsRepository 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


[#2299] Wednesday, November 11, 2020, 4 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
sandra

Total Points: 708
Total Questions: 100
Total Answers: 84

Location: Bosnia and Herzegovina
Member since Thu, Jun 24, 2021
3 Years ago
sandra questions
Tue, Jun 30, 20, 00:00, 4 Years ago
Sun, May 31, 20, 00:00, 4 Years ago
Wed, May 20, 20, 00:00, 4 Years ago
Fri, May 31, 19, 00:00, 5 Years ago
;