我正在使用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试图重新创建一个已经存在的表?为了便于使用,我不想总是记得每次切换同步.
发布于 2022-03-16 13:11:03
对我来说,解决方案是将TypOrmModule配置中的数据库名称更改为小写,以匹配mysql服务器上创建的模式。
由于某些原因,允许在TypeOrm的第一次设置时进行不同的设置。
https://stackoverflow.com/questions/62434734
复制相似问题