【发布时间】:2020-10-07 14:39:11
【问题描述】:
我正在使用 NestJS、TypeORM 和 MySQL 构建 Web 应用程序。
我正在使用.env 文件来传递一些环境变量以连接到我的本地数据库。同步设置为true。
app.module.ts
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: '.env' }),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get('TYPEORM_HOST'),
port: configService.get('TYPEORM_PORT'),
username: configService.get('TYPEORM_USERNAME'),
password: configService.get('TYPEORM_PASSWORD'),
database: configService.get('TYPEORM_DATABASE'),
autoLoadEntities: true,
synchronize: configService.get('TYPEORM_SYNCHRONIZE'),
}),
inject: [ConfigService],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {
constructor(private connection: Connection) {}
}
另外,我有一个导入用户实体的用户模块。
users.module.ts
import { User } from './Entities/User.entity';
@Module({
imports: [TypeOrmModule.forFeature(
[User]
)],
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule { }
User.entity.ts
@Entity({ name: "Users"})
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
userName: string;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
email: string;
}
假设我的数据库是空的,当第一次启动应用程序时,TypeORM 同步会自动为我创建具有适当列和数据类型的用户表。但是,当关闭应用程序并尝试重新启动时,我收到此错误:
[Nest] 14876 - 06/17/2020, 12:37:33 PM [ExceptionHandler] Table 'users' already exists +3ms
QueryFailedError: Table 'users' already exists
at new QueryFailedError (C:\MyProject\Server\node_modules\typeorm\error\QueryFailedError.js:11:28)
at Query.onResult (C:\MyProject\Server\node_modules\typeorm\driver\mysql\MysqlQueryRunner.js:170:45)
at Query.execute (C:\MyProject\Server\node_modules\mysql2\lib\commands\command.js:30:14)
at PoolConnection.handlePacket (C:\MyProject\Server\node_modules\mysql2\lib\connection.js:417:32)
at PacketParser.onPacket C:\MyProject\Server\node_modules\mysql2\lib\connection.js:75:12)
at PacketParser.executeStart (C:\MyProject\Server\node_modules\mysql2\lib\packet_parser.js:75:16)
at Socket.<anonymous> (C:\MyProject\Server\node_modules\mysql2\lib\connection.js:82:25)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:302:12)
at readableAddChunk (_stream_readable.js:278:9)
如果我随后关闭同步并重新启动它,我会收到同样的错误。我唯一的解决方法是删除users 表,重新打开同步以重新创建它,然后将其关闭。 TypeORM 尝试重新创建已经存在的表是否有原因?为了便于使用,我不想每次都记得切换同步。
【问题讨论】:
-
您找到解决此问题的方法了吗?
-
@Hyra10 不,因为我在发布此问题后不久就转到了另一个问题。如果你弄明白了,请在此处发布答案。
-
我也遇到了这个问题,但是虽然我也给了我这个例外,但我只是重新启动服务器并成功运行。并且该表也在数据库中创建,并读取以使用。 ???奇怪的东西。