前言
上一节我们用nestjs搭建了项目,了解了核心模块,接下来我们通过创建用户模块并且完成简单的CRUD。
创建user模块
这里我使用CLI 创建模块的方式。
nest g module user
nest g co user
nest g service user
创建完成后是这样:
连接数据库
我们采用typeorm来完成连接mysql数据库。
-
安装
pnpm add @nestjs/typeorm typeorm mysql2这里采用的是mysql(自己电脑里面安装一下),vscode安装插件
Database Client来连接数据库。 -
创建数据库
-
typeorm连接数据库
在
app.module.ts中配置,现在数据库就连接成功了。-
踩坑
这里我在根目录下添加
ormconfig.json配置数据库信息,然后在
app.module.ts中直接配置TypeOrmModule.forRoot()就连接不成功(控制台有报错)。
-
-
创建user表
这里采用代码添加
user实体类进行创建表user.entity.ts:import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Unique, } from 'typeorm'; @Entity('user') // 指定表名为 user export class User { @PrimaryGeneratedColumn() id: number; // 用户id,自增主键 @Column({ unique: true }) username: string; // 用户名,需要唯一 @Column({ unique: true }) userCode: string; // 用户code,需要唯一 @Column() password: string; // 密码,应该使用加密存储 @Column({ unique: true }) phone: string; // 手机号,需要唯一 @Column({ unique: true }) email: string; // 邮箱,需要唯一 @CreateDateColumn({ type: 'timestamp' }) created_at: Date; // 创建时间 @UpdateDateColumn({ type: 'timestamp' }) updated_at: Date; // 更新时间 }目录结构如下:
然后在
user.module.ts中添加实体类的引入:import { Module } from '@nestjs/common'; import { UserController } from './user.controller'; import { UserService } from './user.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from './entities/user.entity'; @Module({ imports: [TypeOrmModule.forFeature([User])], controllers: [UserController], providers: [UserService], }) export class UserModule {}然后刷新数据库表,就看到新增了user表:
CRUD
-
插入用户
-
手动添加
create-user.dto.ts: -
user.service.ts
import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { User as UserEntity } from './entities/user.entity'; import { CreateUserDto } from './dto/create-user.dto'; @Injectable() export class UserService { // 通过@InjectRepository(UserEntity)将UserEntity的仓库注入到userRepository属性中,这样就可以在类中使用userRepository来操作数据库 constructor( @InjectRepository(UserEntity) private readonly userRepository: Repository<UserEntity>, ) {} // 这里添加创建user的方法;createUserDto:方法的参数,是一个CreateUserDto类型的对象,包含了创建用户所需的数据 async create(createUserDto: CreateUserDto) { // 使用userRepository的save方法将createUserDto保存到数据库中,并返回保存后的用户对象。 return await this.userRepository.save(createUserDto); } } -
-
user.controller.ts
import { Controller, Body, Post } from '@nestjs/common'; import { UserService } from './user.service'; import { CreateUserDto } from './dto/create-user.dto'; @Controller('user') export class UserController { // 注入UserService实例,用于在控制器中调用用户服务的方法。 constructor(private readonly userService: UserService) {} // 定义一个异步方法createUser,接收一个CreateUserDto类型的参数。@Body()装饰器用于从请求体中提取数据 @Post('create') async createUser(@Body() createUserDto: CreateUserDto) { // 调用UserService的create方法,传入createUserDto参数,并返回结果。 return this.userService.create(createUserDto); } }
然后通过工具请求,创建成功:
当然个人还是喜欢用数据库工具查看,大家根据自己的喜好:
-
查询
-
user.controller.ts
-
user.service.ts
-
-
修改
- update-user.dto.ts
import { PartialType } from '@nestjs/mapped-types'; import { CreateUserDto } from './create-user.dto'; export class UpdateUserDto extends PartialType(CreateUserDto) {}- user.controller.ts
- user.service.ts
- 删除
- user.controller.ts
- user.service.ts
- user.controller.ts