javascript - 播种时未找到 "entity"的元数据

标签 javascript typescript nestjs typeorm faker

我正在使用 Faker 通过 TypeORM 构建一个播种系统,在播种时抛出以下错误:

🌱  TypeORM Seeding v1.6.1
✔ ORM Config loaded
✔ Factories are imported
✔ Seeders are imported
✔ Database connected
⠹ Executing CreateUsers Seeder
❌  Could not save entity
EntityMetadataNotFound: No metadata for "UsersEntity" was found.

✖ Could not run the seed CreateUsers!
Error: Could not save entity

error Command failed with exit code 1.

我在 package.json 中使用 typeorm-seeding npm 包的 CLI

"seed": "yarn migration:up && cross-env CLI=true ts-node -r tsconfig-paths/register ./node_modules/typeorm-seeding/dist/cli.js ---root src/core/config -n database-configuration.ts seed",

我有我的 user.factory.ts 使用 users.entity.ts

define(UsersEntity, async (faker: typeof Faker) => {
  const user = new UsersEntity();
  user.firstName = faker.name.firstName();
  user.lastName = faker.name.lastName();
  user.email = faker.internet.email().toLowerCase();
  user.phone = faker.phone.phoneNumber();
  user.imageUrl = faker.image.people();
  user.password = await CryptoUtils.getHash('password');
  user.role = Role.User;
  return user;
});

以及用于运行播种的user.seeder.ts

export class CreateUsers implements Seeder {
  public async run(factory: Factory): Promise<any> {
    await factory(UsersEntity)().createMany(10);
  }
}

最后,这是我在 CLI 中用于运行播种的数据库配置

return {
    type: 'postgres',
    host: process.env.POSTGRES_HOST,
    port: +process.env.POSTGRES_PORT,
    username: process.env.POSTGRES_USER,
    password: process.env.POSTGRES_PASSWORD,
    database: process.env.POSTGRES_DB,
    entities:
      process.env.NODE_ENV === 'test'
        ? ['src/**/*.entity.ts']
        : ['dist/**/*.entity{.ts,.js}'],
    synchronize: false,
    keepConnectionAlive: true,
    migrationsRun: true,
    logging: process.env.DATABASE_SHOW_SQL === 'true' || false,
    migrations:
      process.env.NODE_ENV === 'test'
        ? ['src/core/database/migrations/**/*.ts']
        : ['dist/core/database/migrations/**/*.js'],
    seeds: ['src/core/database/seed/seeder/**/*{.ts,.js}'],
    factories: ['src/core/database/seed/factory/**/*{.ts,.js}'],
    cli: {
      migrationsDir: 'src/core/database/migrations',
    },
};

最佳答案

我通过在我的工厂种子文件上添加NODE_ENV检查来解决这个问题,以避免在dist中获取文件> 和src

问题是我正在开发环境中工作。这些实体是在 dist 目录中找到的,而不是在 src 中找到的 factoriesseeds,而不是在 src 中找到的。 dist 文件夹。

解决方案是对工厂种子应用process.env.NODE_ENV检查:

seeds:
    process.env.NODE_ENV === 'test'
        ? ['src/core/database/seed/seeder/**/*.ts']
        : ['dist/core/database/seed/seeder/**/*.js'],
factories:
    process.env.NODE_ENV === 'test'
        ? ['src/core/database/seed/factory/**/*.ts']
        : ['dist/core/database/seed/factory/**/*.js'],

关于javascript - 播种时未找到 "entity"的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66216474/

相关文章:

javascript - Livecycle RegEx 字符长度错误

javascript - Raphael.js onclick 事件

c# - 循环遍历响应对象 Angular

javascript - typescript :使用 let (最佳实践)

node.js - 如何在sequelize Nest.JS中添加钩子(Hook)

javascript - Nest.js中如何返回202 Accepted然后继续处理请求

javascript - 内联 PHP 停止使用 if 函数和 javascript

angular - 在 IIS 中托管 Angular 4 应用程序后出现 HTTP 错误 500.19 内部服务器错误

node.js - 使用 Sequelize 将数据插入 SQLITE DB 时,由于 "file change"导致开发服务器自行重启,MySQL 不会发生 [包括 repo ]

javascript - 无法从 d3 中的 csv 文件导入数据