NestJS + TypeORM 中的 JoinTable 问题

Posted

技术标签:

【中文标题】NestJS + TypeORM 中的 JoinTable 问题【英文标题】:Issue with JoinTable in NestJS + TypeORM 【发布时间】:2021-04-26 05:39:39 【问题描述】:

我在 NestJS + TypeORM 中遇到一个奇怪的问题。

我几乎在一个实体中创建了一个 ManyToMany 关系,并且在关系的拥有方,我添加了不带参数的 @JoinTable()。

运行nest build后,entity.js文件添加了一个新的import const browser_1 = require("typeorm/browser");,我发现它用于在编译的JS文件中声明JoinTable选项=> browser_1.JoinTable()

问题是,当使用 typeorm 生成新的迁移文件时,我不断收到以下错误:

import  __awaiter, __generator  from "tslib";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Object.require.extensions.<computed> [as .js] (C:\XXX\XXX\dev\XXX\pistis-api\node_modules\ts-node\src\index.ts:1045:43)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (C:\XXX\XXX\dev\XXX\pistis-api\dist\modules\collaborator\entity\collaborator.entity.js:17:19)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)

追踪问题,似乎与从./node_modules/typeorm/browser/index.js导入的浏览器导入有关

我正在使用 .env 来配置 typeorm,具有以下内容:

TYPEORM_CONNECTION=postgres
TYPEORM_HOST=localhost
TYPEORM_USERNAME=xxxxx
TYPEORM_PASSWORD=xxxxx
TYPEORM_DATABASE=xxxx
TYPEORM_PORT=5432
TYPEORM_SYNCHRONIZE=false
TYPEORM_LOGGING=true
TYPEORM_DROP_SCHEMA=false
TYPEORM_MIGRATIONS_RUN=true
TYPEORM_ENTITIES=dist/modules/**/entity/*.js
TYPEORM_ENTITIES_DIR=src/modules/**/entity
TYPEORM_MIGRATIONS=dist/migrations/*.js
TYPEORM_MIGRATIONS_DIR=src/migrations
TYPEORM_MIGRATIONS_TABLE_NAME='orm_migrations'

此配置一直有效,直到我介绍了 ManyToMany 关系和 JoinTable。 就 .tsconfig 而言,我有:


  "compilerOptions": 
    "target": "es6",
    "module": "commonjs",
    "lib": [
      "dom",
      "es6",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "declaration": true,
    "removeComments": true,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": false,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true
  ,
  "include": [
    "src"
  ]

任何帮助将不胜感激。

提前致谢!

【问题讨论】:

【参考方案1】:

所以,在一个月没有接触这个项目之后,我决定重新启动它并重新审视它。几乎发现这是一个与我导入 JoinTable 选项的方式有关的新手问题。我非常信任 IDE 进行导入,这是我的错误。 所以,总结一下:

我有: import JoinTable from 'typeorm/browser';

当我应该拥有: import JoinTable from 'typeorm';

为了将来参考,这些导入错误也可能源于简单的错误,而不是我们在 *** 上发现的告诉我们检查 tsconfig.json 之类的复杂错误。

谢谢:)

【讨论】:

以上是关于NestJS + TypeORM 中的 JoinTable 问题的主要内容,如果未能解决你的问题,请参考以下文章

Nestjs 与自定义存储库中的 Typeorm 事务

TypeORM/NestJS 中的分页

NestJS & TypeORM:发布请求中的 DTO 格式

迁移文件中的 NestJS TypeORM 语法错误

使用 Typeorm 连接到 Nestjs 中的 mssql,但 Nest 无法解析 EmployeeRepository 的依赖关系

如何将 NestJS 中的服务注入 typeorm 存储库?