Skip to content

链接数据库

首先安装@nestjs/typeorm数据库链接工具

bash
pnpm add @nestjs/typeorm typeorm -S

/src/app.module.ts中导入使用

ts
import { TypeOrmModule } from "@nestjs/typeorm"
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: "mysql", // 链接的数据库类型 MySQL
      host: "127.0.0.1",
      port: 3306,
      username: "root", // 数据库用户名
      password: "123456", // 数据库密码
      database: "server-mysql", // 数据库名
      autoLoadEntities: true, // 自动加载Entities实例
      synchronize: true, // 是否序列化
      namingStrategy: new CustomNamingStrategy() // 启用驼峰命名
    }),
  ],
  providers: []
})
export class AppModule {}

TIP

new CustomNamingStrategy() 启用驼峰命名是为了自动加载实例的时候,数据库中的字段名使用驼峰法,

  • 比如user.entiry.ts中定义的字段名是roleName,通过调用该方法,数据库的字段名就会变成role-name

  • @Entity("User")定义数据库的表名,那么存入数据库的表名就是user

代码地址

/src/utils/index.ts

ts
import { DefaultNamingStrategy } from "typeorm"

/** 自定义数据库字段 */
export class CustomNamingStrategy extends DefaultNamingStrategy {
  // 用来修改表名,将大写变成小写
  tableName(targetName: string, userSpecifiedName: string): string {
    let getTableName = targetName
    getTableName = getTableName.replace(/\w{1}/, getTableName[0].toLowerCase())
    getTableName = getTableName.replace(/([A-Z])/g, "_$1").toLowerCase()
    return getTableName
  }
  // 用来修改字段名
  columnName(propertyName: string): string {
    return propertyName.replace(/([A-Z])/g, "_$1").toLowerCase()
  }
}