簡體   English   中英

RepositoryNotFoundError:當我使用導入時,沒有找到 [Enitity] 的存儲庫

[英]RepositoryNotFoundError: No repository for [Enitity] was found when I using imports

我開始在我的 nodejs 應用程序中使用typeorm (純節點,無嵌套)。

而且我還有一個文件,里面有使用typeorm的函數:

import {getRepository} from 'typeorm';
import { User, Post, ... } from './entities';

export const foo = () => { 
 const userRepository= getRepository(User);
 ... my logic ...
 user.find(...);
 ... my logic ...
}

export const bar = () => { 
 const userRepository= getRepository(User);
 const postRepository= getRepository(Post);
 ... my logic ...
 user.create(...);
 ... my logic ...
}

export const baz = () => { 
 const userRepository= getRepository(User);
 ... my logic ...
 user.delete(...);
}

我不喜歡在我寫的每個 function 中調用getRepository function。 我更喜歡這樣使用import

import { UserRepository, PostRepository, ... } from './repos';

問題是在建立連接之前我無法使用getRepository 它給我一個錯誤說:

RepositoryNotFoundError: No repository for [Enitity] was found. Looks like this entity is not registered in current "default" connection?

我所做的是(repos.ts):

 export const UserRepository = getRepository(User);
 export const PostRepository = getRepository(Post);

因為它已經export節點/webpack 嘗試先解決這個變量。 在應用程序運行之前(以及在建立連接之前)。

那么知道如何讓它按我的意願工作嗎?

我認為您的意思是一種稱為 Active Record 的模式。

typeorm可以選擇使用 Data Mapper(您現在正在使用的,使用getRepository或使用 Active Record 即BaseEntity

對於 Active Record,您可以使用 export 將它們導出並導入它們而不會出現此錯誤。

例如:

@Entity()
export class User extends BaseEntity { ... }
User.findOne(..), User.find(..)

數據映射器:

export class UserRepository extends Repository<User> {...}
const userRepository = connection.getRepository(User);
userRepository.findOne, userRepository.find(...)

閱讀有關Active Record 與 Data Mapper的更多信息。

在您的 ormconfig 文件中,添加具有調用 .ts 和 .js 格式的值的實體 object。

這是示例

import * as dotenv from 'dotenv';
import { ConnectionOptions } from 'typeorm';

dotenv.config();
const config: ConnectionOptions = {
  type: 'mysql',
  host: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT),
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  entities: [__dirname + '/**/*.entity{.ts,.js}'],
  synchronize: process.env.DB_SYNCHRONIZE === 'true',
  migrationsRun: !(process.env.DB_SYNCHRONIZE === 'true'),
  logging: true,
  logger: 'file',
  migrations: [__dirname + '/migrations/**/*{.ts,.js}'],
  cli: {
    migrationsDir: 'migrations',
  },
};

export = config;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM