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

相关推荐
周某人姓周4 小时前
VM下载使用mysql
mysql
人总该做点什么4 小时前
【数据库】一、数据库系统概述
数据库·sql·mysql·sqlserver
头发多的码农4 小时前
mysql、postgresql、druid链接池踩坑记录
数据库·mysql·postgresql
曹二7474 小时前
MySQL 视图 存储过程与存储函数
数据库·mysql
等一场春雨6 小时前
MySQL 主从同步中间件
数据库·mysql·中间件
等一场春雨8 小时前
Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡
spring boot·mysql·负载均衡
narukeu9 小时前
对于 TypeORM 精准&模糊查询的简单二次封装
typescript·node.js·express·typeorm
计算机学姐12 小时前
基于SpirngBoot的家电销售管理系统
java·vue.js·spring boot·后端·mysql·tomcat·mybatis
AI探索先锋13 小时前
Ubuntu 20.04下MySQL 8.4.3 LTS离线安装全攻略
linux·服务器·mysql·ubuntu
大梦百万秋13 小时前
从零开始搭建一个RESTful API(Node.js + Express)
node.js·restful·express