NestJS中无法运行TypeORM迁移:dataSourceFileExport不可迭代求助
NestJS配置TypeORM迁移遇到dataSourceFileExport不可迭代的解决方案
问题原因分析
这个错误通常是TypeORM CLI无法正确识别migration.config.ts中导出的DataSource实例导致的,大概率和导出方式、版本兼容性或配置路径有关。
解决方案
1. 修正migration.config.ts的导出方式
TypeORM CLI在0.3.x版本中,默认期望配置文件默认导出DataSource实例,而非命名导出。
- 修改前(命名导出):
import { DataSource } from 'typeorm'; export const dataSource = new DataSource({ // 你的数据库配置 type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'password', database: 'nestjs', entities: ['src/**/*.entity.ts'], migrations: ['src/migrations/**/*.ts'], }); - 修改后(默认导出):
import { DataSource } from 'typeorm'; export default new DataSource({ // 你的数据库配置 type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'password', database: 'nestjs', entities: ['src/**/*.entity.ts'], migrations: ['src/migrations/**/*.ts'], });
2. 确认package.json中的迁移脚本配置
确保脚本正确指定配置文件路径,且使用对应TypeORM版本的CLI命令:
"scripts": { "typeorm": "typeorm-ts-node-commonjs -d ./migration.config.ts", "migration:generate": "npm run typeorm migration:generate ./src/migrations/InitialMigration", "migration:run": "npm run typeorm migration:run" }
- 若项目配置了
"type": "module"(ES模块),需将命令改为typeorm-ts-node-esm。
3. 检查TypeORM版本兼容性
你参考的博客发布于2022年,使用的TypeORM版本可能和当前安装版本存在差异。可尝试安装博客对应版本(如typeorm@0.3.7),或参考TypeORM官方最新文档调整配置。
4. 验证迁移脚本格式
确保迁移脚本符合TypeORM规范:
import { MigrationInterface, QueryRunner } from "typeorm"; export class InitialMigration1658765432100 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { // 编写表创建/修改逻辑 await queryRunner.query(` CREATE TABLE "users" ( "id" SERIAL PRIMARY KEY, "email" VARCHAR(255) UNIQUE NOT NULL, "password" VARCHAR(255) NOT NULL ) `); } public async down(queryRunner: QueryRunner): Promise<void> { // 编写回滚逻辑 await queryRunner.query(`DROP TABLE "users"`); } }
- 文件名需包含时间戳(TypeORM生成时自动添加),且存放路径与
migration.config.ts中migrations配置的路径一致。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

