文章目录
- 一、下载 MySql 数据库
- 二、下载VsCode插件
- 查询、插入数据
一、下载 MySql 数据库
NestJS连接数据库我选择的是MySql,首先先安装@nestjs/typeorm 、typeorm、 mysql2 执行命令:
pnpm install @nestjs/typeorm typeorm mysql2 -S
连接数据库需要你本地安装mysql数据库,其次确保你的mysql是启动状态,在电脑本地service查看状态
二、下载VsCode插件
关于数据库可视化操作的工具有很多,Navicat、mysqslWorkBench等 ,这里使用的是VScode的插件Database Client
🅰️注:密码跟本地Mysql数据库密码一致
1️⃣插件安装好之后,输入数据库的密码进行连接即可
2️⃣下一步开始连接mysql,进入app.module.ts
中进行数据库连接的配置
autoLoadEntities
自动加载实体配置,forFeature()注册的每个实体都自动加载
import { Module } from '@nestjs/common';
import { GirlModule } from './girl/girl.module';
import { UserModule } from './user/user.module';
import { ListModule } from './list/list.module';
import { ConfigModule } from './config/config.module';
import { UploadModule } from './upload/upload.module';
import { LoginModule } from './login/login.module';
import { SpiderModule } from './spider/spider.module';
import { GuardModule } from './guard/guard.module';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: "mysql", //数据库类型
username: "root", //账号
password: "123456", //密码
host: "localhost", //host
port: 3306, //
database: "aicheck", //库名
entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件
synchronize:true, //synchronize字段代表是否自动将实体类同步到数据库
retryDelay:500, //重试连接数据库间隔
retryAttempts:10,//重试连接数据库的次数
autoLoadEntities:true, //如果为true,将自动加载实体 forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中
})
,GirlModule, UserModule,ListModule,ConfigModule, UploadModule, LoginModule, SpiderModule, GuardModule],
controllers: [],
providers: [],
})
export class AppModule {}
3️⃣在user.entity.ts
文件里面添加实体,实体是一个映射到数据库表的类。 实体就是一张数据表,在typeorm
中我们不需要对数据库的表使用相关工具进行创建与关联,而只需要创建一个实体,并且将实体中的数据内容设置好,那么在项目启动后,就会自动生成对应的表,并且将表与表之间的关系给创建好。
import { Column, Entity, PrimaryGeneratedColumn, BeforeInsert, CreateDateColumn, Generated, OneToOne, JoinColumn, OneToMany } from 'typeorm'
import { Tags } from './tags.entity'
@Entity()
export class User {
// 自动生成主键
@PrimaryGeneratedColumn()
id: number
// 定义字段
@Column({ type: "varchar", length: 255 })
name: string
// 定义字段
@Column({ type: "text" })
desc: string
// 生成uuid
@Generated('uuid')
uuid: string
// 创建时间
@CreateDateColumn({ type: "timestamp" })
createTime: Date
// 联表查询一对多
@OneToMany(() => Tags, (tags) => tags.user)
tags:Tags[]
}
4️⃣ 然后重新启动,如果数据库并没有添加User表,可以看下user.module.ts,添加下图中圈起来的代码,重新启动
添加成功就可以看到添加的User表
查询、插入数据
在 user.service.ts
文件里面添加以下代码
打开调试工具进行接口调试,我这里使用的是apifox,调用 user 接口,传入 username 和 password
然后在database里面就可以看到插入的这条数据
在面板中打开时候会一直查询,点击关闭之后,再点击执行就可以看到这条数据了
一般来说数据库的配置包含了一些敏感信息不宜写在代码中提交到远程仓库,所以我们可以将配置写在配置文件中,然后提交 git 时候将生产环境的配置文件其忽略,这里我们新
建.env.stage.default
、.env.stage.dev
、.env.stage.prod
文件分别存放默认、开发与生产环境配置
✌️我们还需要安装cross-env
来判断我们是处于什么环境,检查下有没有安装@nestjs/config,如果没有也要安装
pnpm install cross-env @nestjs/config
1️⃣首先修改package.json 里面的启动命令(打包修改一样),在命令后面添加 STAGE=dev 用于判断不同的环境加载不同的环境配置
2️⃣在根目录创建 .env.stage.default、.env.stage.dev、.env.stage.prod 并在default文件里面配置数据库基本配置,在prod 文件里面添加DB_SYNC=false,这里面主要是配置生产的数据库一些配置
.env.stage.default
DB_HOST=localhost
DB_PORT=3306
SERVE_PORT=3333
DB_USERNAME=root
DB_PASSWORD=123456
DB_DATABASE=manageadmin
DB_SYNC=true
3️⃣tsconfig.lib.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"declaration": true,
"outDir": "../../dist/libs/db"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "test", "**/*spec.ts"]
}
4️⃣libs/db/src/db.module.ts
import { Global, Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Global()
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`.env.stage.${process.env.STAGE}`, '.env.stage.default'],
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (ConfigService: ConfigService) => ({
type: 'mysql',
host: ConfigService.get('DB_HOST'),
port: ConfigService.get('DB_PORT'), // 端口号
username: ConfigService.get('DB_USERNAME'), // 用户名
password: ConfigService.get('DB_PASSWORD'), // 密码
database: ConfigService.get('DB_DATABASE'), //数据库名
autoLoadEntities: true, //自动加载实体配置,forFeature()注册的每个实体都自己动加载
synchronize: ConfigService.get('DB_SYNC'), // 是否将实体同步到数据库
}),
}),
],
})
export class DbModule {}
5️⃣libs/db/src/index.ts
export * from './db.module';
6️⃣app.module.ts
7️⃣main.ts
接下来重启项目,测试刚才的查询是否好使,如果重启失败报错,请仔细检查代码是否有出入