Javascript 如果未在配置文件中设置实体目录,则TypeORM找不到实体

Javascript 如果未在配置文件中设置实体目录,则TypeORM找不到实体,javascript,typescript,typeorm,Javascript,Typescript,Typeorm,我将typerm与fallowing配置文件一起使用:ormconfig.json { "type": "mysql", "host": "localhost", "port": 3306, "username": "root", "password": "my-secret-pw", "database": "mytestdb", } 我的实体文件存储在./src/bar/entity目录中。 我总是遇到以下错误: RepositoryNotFoundError:找不到“myTable”的存

我将typerm与fallowing配置文件一起使用:ormconfig.json

{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "my-secret-pw",
"database": "mytestdb",
}
我的实体文件存储在./src/bar/entity目录中。 我总是遇到以下错误:

RepositoryNotFoundError:找不到“myTable”的存储库。看起来此实体未在当前“默认”连接中注册

当我手动将目录添加到配置文件时,会找到该实体:

{
...
"entities": ["src/bar/entity/**/*.ts"]
}
我的实体定义如下:

@Entity('myTable')
export default class MyTable {
    @PrimaryGeneratedColumn()
    public id: number;
    ...

如何允许TypeForm查找这些实体而无需在每个目录的配置文件中手动设置?

您描述的最常见情况是使用单独的
实体
目录,该目录仅包含实体声明

{
...
"entities": ["src/bar/entities/**/*.ts"]
}
另一种方法是分别导入每个实体:

import {User} from "./payment/entity/User";
import {Post} from "./blog/entity/Post";

{
...
"entities": [User, Post]
}

如果您不想将所有实体放在同一个位置(即如果您有模块文件夹并想将实体放在其关联的模块文件夹中),并且如果您使用的是文件命名约定,如
foo.entity.ts
foo.service.ts
,等等。然后您可以执行以下操作,它将在源树中的任何位置找到所有实体:

{
  ...
  "entities": ["src/**/*{.entity.ts}"],
}
对我来说,答案是

{
...
实体:[连接(uu dirname,'/../**/**.entity{.ts,.js}'),
}

我在这里找到了答案

对我来说,它还帮助我将
src
目录添加到
或mconfig.json

  "entities": [
    "dist/**/*.entity{.ts,.js}",
    "src/**/*.entity{.ts,.js}"
  ],

为了适应开发和生产环境,我必须这样做:

entities: [
   this.isProduction() ? 
       path.join(__dirname, '../**/**.entity{.ts,.js}') : '**/*.entity{.ts,.js}',
],

// ....

private isProduction(): boolean {
    const mode = this.configService.get('NODE_ENV');
    return mode !== 'development';
}

确保实体文件的名称不是复数。例如,如果要创建post实体文件,则该文件不应为“posts.entity.ts”,而应为“post.entity.ts”

第二个选项不可能使用配置文件,对吗?。如何分别加载这些实体?我想你的意思是,使用
ormconfig.json
不可能,只需将文件声明为
ormconfig.js
which module.exports配置对象即可。若你们将项目划分为应用程序,那个么整个项目都会有不同的floder,这让nosense变得很有意义。通常情况下,如果项目将巨大,我会更喜欢把数据库作为单独的小项目,并有我的所有实体在一个实体文件夹只。并根据应用程序名称细分实体文件夹,简化{src,dist}/***.entity{.ts,.js}有趣--为什么需要这样做