迁移文件中的 NestJS TypeORM 语法错误
Posted
技术标签:
【中文标题】迁移文件中的 NestJS TypeORM 语法错误【英文标题】:NestJS TypeORM syntax error in migration file 【发布时间】:2020-08-26 03:06:13 【问题描述】:我正在浏览 NestJS 官方文档。我在 Heroku 上设置了 PostgreSQL,与 TypeORM 连接,运行迁移,然后我的应用程序开始崩溃。我尝试了不同的方法并在 github/questions 上搜索了博客/问题,但没有任何帮助。
这是一个错误:
[Nest] 46723 - 05/10/2020, 6:33:42 PM [InstanceLoader] TypeOrmModule dependencies initialized +84ms
[Nest] 46723 - 05/10/2020, 6:33:43 PM [TypeOrmModule] Unable to connect to the database. Retrying (1)... +493ms
/Users/Shared/diploma/be/migration/1589119433066-AddUser.ts:1
import MigrationInterface, QueryRunner from "typeorm";
^
SyntaxError: Unexpected token
at Module._compile (internal/modules/cjs/loader.js:721:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Function.PlatformTools.load (/***/PROJECT_ROOT/node_modules/typeorm/platform/PlatformTools.js:114:28)
at /***/PROJECT_ROOT/node_modules/typeorm/util/DirectoryExportedClassesLoader.js:39:69
at Array.map (<anonymous>)
这是我的ormconfig.json
:
"type": "postgres",
"url": "postgres://***",
"ssl": true,
"extra":
"ssl":
"rejectUnauthorized": false
,
"entities": ["dist/**/*.entity.ts,.js"],
"migrationsTableName": "custom_migration_table",
"migrations": ["migration/*.ts,.js"],
"cli":
"migrationsDir": "migration"
迁移是使用ts-node ./node_modules/.bin/typeorm migration:generate -n AddUser
生成的
我正在使用nest start --watch
命令来启动应用程序。
迁移文件TIMESTAMP-AddUser.ts
:
import MigrationInterface, QueryRunner from "typeorm";
export class AddUser1589119433066 implements MigrationInterface
name = 'AddUser1589119433066'
public async up(queryRunner: QueryRunner): Promise<void>
await queryRunner.query(`CREATE TABLE "users" (...)`, undefined);
public async down(queryRunner: QueryRunner): Promise<void>
await queryRunner.query(`DROP TABLE "users"`, undefined);
【问题讨论】:
您是否尝试过从迁移中删除 javascript 文件(反之亦然)?听起来它正在尝试作为 JS 而不是 TS 执行,你能显示你的迁移文件或至少它的最小版本吗? @Isolated 我将迁移文件添加到主消息中。 TypeORM 生成 .ts 迁移,应该没问题(根据他们的文档)。我用 ts-node 运行它(也在 typeorm 文档中指定),它应用到数据库没有问题 我不在 PC 上,所以这只是基本调试,我最后的想法是在 CLI 中将entitiesDir:
设置为您的 TS 实体,我很快就会在我的 PC 上,所以我会看看我是否可以在我的 nest.js 中重现它
【参考方案1】:
感谢@Isolated!
我已经更改了ormconfig.json
,所以实体和迁移文件现在看起来像这样,它对我来说很好用:
"entities": ["dist/**/*.entity.ts,.js"],
"migrations": ["dist/migration/*.ts,.js"],
【讨论】:
以上是关于迁移文件中的 NestJS TypeORM 语法错误的主要内容,如果未能解决你的问题,请参考以下文章
播种时NestJS中的TypeOrm:RepositoryNotFoundError
NestJS、PortsgreSQL 和 TypeORM - 迁移运行不正常
使用 TypeORM 和 NestJs 和 Typescript 创建新迁移时出错 [关闭]