在Nestjs使用mysql和typeorm

1. 创建项目

bash 复制代码
nest new nest-mysql-test

2. 添加config

安装 @nestjs/config 包

bash 复制代码
pnpm i --save @nestjs/config

添加 .env 文件

DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=123456
DATABASE_DB=dbtest

创建 config/database.config.ts 文件

javascript 复制代码
import { registerAs } from '@nestjs/config';

export default registerAs('database', () => ({
  type: process.env.DATABASE_TYPE || 'mysql',
  host: process.env.DATABASE_HOST || 'localhost',
  port: parseInt(process.env.DATABASE_PORT, 10) || 3306,
  username: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_DB,
}));

添加 common 模块

bash 复制代码
nest g module common

修改 common.module.ts

javascript 复制代码
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import databseConfig from 'src/config/databse.config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      load: [databseConfig],
    }),
  ],
})
export class CommonModule {}

3. 添加typeorm

安装依赖包

bash 复制代码
pnpm install --save @nestjs/typeorm typeorm mysql2

修改 common.module.ts

javascript 复制代码
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import databseConfig from 'src/config/databse.config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      load: [databseConfig],
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => ({
        ...configService.get('database'),
        entities: [],
        autoLoadEntities: true,
        synchronize: true,
      }),
    }),
  ],
})
export class CommonModule {}

4. 添加实体

创建 entity/user.entity.ts 文件

javascript 复制代码
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

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

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column({ default: true })
  isActive: boolean;
}

在 common 模块中引入 user 实体

javascript 复制代码
import { User } from '../entity/user.entity';

@Module({
  imports: [
    ...
    TypeOrmModule.forRootAsync({
      ...
      useFactory: (configService: ConfigService) => ({
        ...
        entities: [User],
      }),
    }),
  ],
})
export class CommonModule {}

5. 运行项目

相关推荐
warrah6 小时前
mysql主从同步
mysql·主从
JSON_L7 小时前
MySQL 事务处理
数据库·mysql
飞翔沫沫情8 小时前
mysql快速定位cpu 占比过高的sql语句
mysql
King.6249 小时前
SQLynx如何提高企业数据库安全?
数据库·sql·mysql·postgresql·oracle
夜夜亮晶晶11 小时前
MySQL——表操作
数据库·mysql
GGBondlctrl11 小时前
【MySQL】初识MySQL—MySQL是啥,以及如何简单操作???
数据库·mysql
cool 32113 小时前
MySQL—死锁
数据库·mysql
杨哥带你写代码14 小时前
网上订餐新体验:SpringBoot技术驱动
数据库·spring boot·mysql
白雾茫茫丶14 小时前
Nest.js 实战 (十二):优雅地使用事件发布/订阅模块 Event Emitter
nestjs·nest.js·发布订阅·event emitter
JSON_L16 小时前
MySQL 存储过程
数据库·mysql