Msk
Msk

Reputation: 33

typeorm custom repository does not work "Cannot read property 'findOne' of undefined" when using extends Repository<>

I want to use custom repository using extends Repository<>.

When I use custom repository using extends Repository<>, error of "Cannot read property 'findOne' of undefined" is occurred.

custom repository

import { EntityRepository, getRepository, Repository } from "typeorm";
import { User } from "../entity/User";

@EntityRepository(User)
export class AuthRepository extends Repository<User> {
  loginByEmail(email: string) {
    return this.findOne({ email: email });
  }
}

Entity of User

import {
  Entity,
  Unique,
  PrimaryGeneratedColumn,
  Column,
  Timestamp,
  CreateDateColumn,
  UpdateDateColumn,
} from "typeorm";

@Entity()
@Unique(["email"])
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstname: string;

  @Column()
  lastname: string;

  @Column()
  email: string;

  @Column()
  password: string;

  @CreateDateColumn()
  createdAt: Timestamp;

  @UpdateDateColumn()
  updatedAt: Timestamp;

  @Column({ type: "boolean", default: false })
  isAdmin: boolean;
}

and my ormconfig.ts is below.

import { ConnectionOptions } from "typeorm";

const ormconfig: ConnectionOptions = {
  type: "mysql",
  host: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT, 10),
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  synchronize: true,
  logging: false,
  entities: ["src/entity/**/*.ts"],
  migrations: ["src/migration/**/*.ts"],
  subscribers: ["src/subscriber/**/*.ts"],
  cli: {
    entitiesDir: "src/entity",
    migrationsDir: "src/migration",
    subscribersDir: "src/subscriber",
  },
};

export default ormconfig;

However, below code is work when I use getRepository.

import { EntityRepository, getRepository, Repository } from "typeorm";
import { User } from "../entity/User";

@EntityRepository(User)
export class AuthRepository extends Repository<User> {
  loginByEmail(email: string) {
    return getRepository(User).findOne({ email: email });
  }
}

In addition, when I confirm this by console.log(), the result is empty {}.

AuthRepository {}

what is happened?. How to solve this situation.

please help me, thank you.

Upvotes: 2

Views: 1742

Answers (1)

wald3
wald3

Reputation: 420

the answer for me was to remove UserRepository from providers: [] in user.module.ts

Upvotes: 3

Related Questions