NestJS typeorm - 无法创建实体

Posted

技术标签:

【中文标题】NestJS typeorm - 无法创建实体【英文标题】:NestJS typeorm - can't create entity 【发布时间】:2019-11-13 09:32:31 【问题描述】:

我正在尝试向我的 TypeOrm(配置为 mysql)添加一个 Idea 实体,并且导入似乎无法正常工作。添加文件后,typeorm 没有成功初始化。

我已经重新安装了 typeorm 包,但我不知道从哪里开始调试。我正在关注一个教程(https://www.youtube.com/watch?v=EHlhvy-fh90),其中没有出现此错误。我通过用 dockerized mysql 替换 postgresql 数据库来偏离它。

我在设置节点 -> mysql 连接时遇到了一些麻烦,最终选择运行 dockerized mysql 5 来解决身份验证错误(遵循此答案:https://***.com/a/50167617/9043642)。如果没有idea.entity.ts 文件,连接就会通过(使用orm),所以我不认为数据库会出现问题。

这就是我的idea.entity.ts 文件的样子。它有效地遵循了文档 (https://docs.nestjs.com/techniques/database) 中的示例。复制和粘贴,文档示例还是给出了同样的错误。

import 
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
 from 'typeorm';

@Entity()
export class IdeaEntity 
  @PrimaryGeneratedColumn('uuid') id:string;

  @CreateDateColumn() created:Date;

  @Column('text') idea:string;

  @Column('text') description:string;

我在运行时遇到以下错误

[Nest] 14034   - 07/02/2019, 1:00 PM   [TypeOrmModule] Unable to connect to the database. Retrying (1)... +19ms
[0] /home/miko/node/ideas/src/idea/idea.entity.ts:2
[0] import  Entity, Column, PrimaryGeneratedColumn  from 'typeorm';
[0]        ^
[0] 
[0] SyntaxError: Unexpected token 
[0]     at Module._compile (internal/modules/cjs/loader.js:718:23)
[0]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
[0]     at Module.load (internal/modules/cjs/loader.js:641:32)
[0]     at Function.Module._load (internal/modules/cjs/loader.js:556:12)
[0]     at Module.require (internal/modules/cjs/loader.js:681:19)
[0]     at require (internal/modules/cjs/helpers.js:16:16)
[0]     at Function.PlatformTools.load (/home/miko/node/ideas/node_modules/typeorm/platform/PlatformTools.js:107:28)
[0]     at /home/miko/node/ideas/node_modules/typeorm/util/DirectoryExportedClassesLoader.js:30:69
[0]     at Array.map (<anonymous>)
[0]     at Object.importClassesFromDirectories (/home/miko/node/ideas/node_modules/typeorm/util/DirectoryExportedClassesLoader.js:30:10)

值得注意的是,数据库连接失败。同样,如果没有想法实体,连接就很好。预期结果是[InstanceLoader] TypeOrmCoreModule dependencies initialized。我将如何成功创建这样的实体?

【问题讨论】:

这个错误通常是由于语法问题引起的,通常在你的代码中。查看前面的 import 语句是否有问题。 【参考方案1】:

将实体的路径添加为您的 dist 文件夹


    "type":"postgres",
    "host":"localhost",
    "port":"5432",
    "username":process.env.USERNAME,
    "password":process.env.PASSWORD,
    "database":process.env.DATABASE,
    "synchronize":true,
    "logging":true,
    "entities": ["dist/**/**.entity.ts,.js"]    

【讨论】:

了解更多关于您的答案如何以及为何解决问题的详细信息会很有用。【参考方案2】:

我知道这有点晚了,但这可能会对某人有所帮助。我也犯了同样的错误,一切都对我有用,我最终从教程中克隆了一个 repo,并试图找出有什么不同。经过一些迭代后,对我有用的是改变我原来的 nodemon.json 文件:


  "watch": ["dist"],
  "ext": "js",
  "exec": "node dist/main"

对此:


  "watch": ["src"],
  "ext": "js",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node -r tsconfig-paths/register src/main.ts"

实际上只需更改“exec”参数即可。

希望这对某人有所帮助。

【讨论】:

【参考方案3】:

最终变成了一个凌乱的 ormconfig.json 文件。确保它遵循以下格式:https://github.com/nestjs/nest/blob/master/integration/typeorm/ormconfig.json

【讨论】:

以上是关于NestJS typeorm - 无法创建实体的主要内容,如果未能解决你的问题,请参考以下文章

使用 NestJS、TypeORM、GraphQL 更新具有实体之间关系的 PSQL 表

无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint

使用 NestJS 和 TypeORM 为项目生成迁移文件

如何将 NestJS 配置注入 TypeORM 实体?

如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm

如何在带有typeorm的nestjs项目中使用外部实体?