nest 数据库typeorm连接

115 阅读2分钟

首先自然是下载typeorm需要使用的依赖库:

npm install --save @nestjs/typeorm typeorm mysql2

导入TypeOrmModule到modules

我的目录是这样的

image.png

sqlorm.modules.ts中导入TypeOrmModule,进而把我的sqlormModule导入到root的APPModule中去。这个目录主要存放数据表的实例和一些通过的数据库curd操作以及数据库相关配置等。

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class SqlOrmModule {}

当然如果想要通过配置文件加载数据库连接配置选项可以通过forRootAsync方法引入

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';

@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      useFactory: async (config: ConfigService) => {
         return {
            type: 'mysql',
            host: config.get<string>('db.remote.ip'),
            port: config.get<number>('db.remote.port'),
            username: config.get<string>('db.remote.username'),
            password: config.get<string>('db.remote.password'),
            database: config.get<string>('db.remote.database'),
            autoLoadEntities: true // 配置这个选项之后在各个模块中通过 TypeOrmModule.forFeature()引入的模块将自动引入,无需再配置entities项
         }
      }
    }),
  ],
})
export class SqlOrmModule {}

完成上述配置后需要在根模块 app.moudule.ts 下引入 sqlorm.module.ts

image.png

接下来我们可以创建 entity 实例并应用, 以下是一个user实例:

export enum UserStatus {
    CANCEL, // 已注销账号
    ACTIVITY // 活跃账号
}

export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({
    type: 'varchar',
    width: 100,
  })
  username: string;

  @Column()
  password: string;

  @Column({
    nullable: true,
  })
  nickname: string;

  @Column({
    type: 'text',
    nullable: true,
  })
  mark: string;

  @Column({
    nullable: true,
  })
  real_name: string;

  @Column({
    type: 'tinyint',
    width: 3,
  })
  age: number;

  // 这里通过 type: 'enum' 创建一个枚举类型,遇到状态一类的字段非常好用
  @Column({
    type: 'enum',
    enum: UserStatus,
    default: UserStatus.ACTIVITY,
  })
  status: UserStatus;
}

以上是typeorm中创建实例的一些方法,还可以创建一对一,一对多,多对多的关系,具体可以查看官方文档: typeorm.io/entities

国内ip访问文档查看 typeorm.biunav.com/zh/#%E5%88%…

创建完成实例之后,需要通过,forFeature方法来引入实例到模块中

1694137913655.png 接下来只要通过 InjectRepository 装饰器注入到对应的构造函数便可操作数据库了

image.png