在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. 运行项目

相关推荐
搬码红绿灯1 小时前
数据库——MySQL数字函数和子查询
数据库·mysql
ifanatic1 小时前
[每周一更]-(第138期):MySQL 子查询详解:原理、应用及优化方案
数据库·mysql
kfepiza2 小时前
Debian编译安装mysql8.0.41源码包 笔记250401
数据库·笔记·mysql·debian·database
老王笔记3 小时前
MySQL统计信息
数据库·mysql
还是鼠鼠4 小时前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
谢尔登5 小时前
为 IDEA 设置管理员权限
前端·express
kfepiza6 小时前
Debian用二进制包安装mysql8.0.41 笔记250401
数据库·笔记·mysql·debian·database
Watink Cpper6 小时前
[MySQL初阶]MySQL(8)索引机制:下
android·数据库·b树·mysql·b+树·myisam·innodedb
苹果酱05676 小时前
SpringCloud第二篇:注册中心Eureka
java·vue.js·spring boot·mysql·课程设计
freejackman6 小时前
MySQL 基础入门
数据库·后端·sql·mysql