typescript 运行app.ts文件时,我收到错误EntityMetadataNotFoundError:找不到“user”的元数据

slhcrj9b  于 2022-12-14  发布在  TypeScript
关注(0)|答案(1)|浏览(582)

我在expressjs上有这个项目,我使用typeorm和typescript。问题是当我在开发模式下运行项目时(使用app.ts),第一个请求时我得到错误:

node_modules/src/data-source/DataSource.ts:427
        if (!metadata) throw new EntityMetadataNotFoundError(target)
                             ^
EntityMetadataNotFoundError: No metadata for "user" was found.

但是当我从/dist/app. js启动项目时一切都正常。
我在tsconfig中使用es 2020作为目标,使用nodeNext作为模块,使用moduleResolution。这是我的package.json文件:`

"type": "module",
  "scripts": {
    "start": "tsc -p . && node dist/app.js",
    "start:prod": "node dist/app.js",
    "dev": "ts-node-esm app.ts --watch",
    "test": "mocha -r ts-node/register src/**/*.ts",
    "test-dev": "nodemon --watch . --ext ts --exec \"mocha -r ts-node/register src/**/*.ts\"",
    "build": "rimraf dist && tsc -p .",
}

'
这是我typorm.config.ts文件:
`

config();
const baseDir = 'dist/src';

export const appDataSource = new DataSource({
  type: 'postgres',
  host: process.env.POSTGRES_DB_HOST,
  port: Number(process.env.POSTGRES_DB_PORT),
  username: process.env.POSTGRES_DB_USER,
  password: process.env.POSTGRES_DB_PASSWORD,
  database: process.env.POSTGRES_DB_DATABASE,
  synchronize: false,
  logging: true,
  entities: [baseDir + '/**/entity/*.entity.js'],
  migrationsRun: true,
  migrations: [baseDir + '/migrations/*.js'],
});

`
我尝试将.ts添加到实体和迁移路径中。

sf6xfgos

sf6xfgos1#

要在生产模式下运行代码,我必须添加“type”:“module”添加到我的package.json文件中,并且在我的tsconfig文件中进行了一些更改。但是在开发模式下,我遇到了这个错误。显然,由于某些原因,我的typeorm.config文件中的.ts扩展名无法被识别。因此,我不得不在我的typeorm.config文件中使用单独的实体和迁移路径。这似乎暂时解决了我的问题。

config();
const entitiesString =
  process.env.NODE_ENV == 'production'
    ? 'dist/src/**/entity/*.entity.js'
    : 'src/**/entity/*.entity.ts';

const migrationString =
  process.env.NODE_ENV == 'production'
    ? 'dist/src/migrations/*.js'
    : 'src//migrations/*.ts';

export const appDataSource = new DataSource({
  type: 'postgres',
  host: process.env.POSTGRES_DB_HOST,
  port: Number(process.env.POSTGRES_DB_PORT),
  username: process.env.POSTGRES_DB_USER,
  password: process.env.POSTGRES_DB_PASSWORD,
  database: process.env.POSTGRES_DB_DATABASE,
  synchronize: false,
  logging: true,
  entities: [entitiesString],
  migrationsRun: true,
  migrations: [migrationString],
});

相关问题