准备工作 1、安装mysql 2、安装navicat软件并建立一个名为ormTest的数据库,密码123456,utf-8,
一、配置
结合实际使用,用nest创建一个项目,先创建一个模块,nest g resource photo
安装TypeOrm
1、npm install --save @nestjs/typeorm typeorm mysql2
2、npm install reflect-metadata --save
3、在main.ts中import 'reflect-metadata'
4、npm install @types/node --save
根目录增加ormconfig.json文件连接数据库
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "12345678",
"database": "nestTest",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
注意⚠️:synchronize必须为true,这样才能自动建表
app.module.ts下
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
PhotoModule,
TypeOrmModule.forRoot({
autoLoadEntities: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
二、开始typeOrm实践
在生成的photo目录下,entites下的文件中
import { Entity, Column, PrimaryColumn } from "typeorm";
@Entity()
export class PhotoEntity {
@PrimaryColumn()
id: number;
@Column()
name: string;
@Column()
description: string;
@Column()
filename: string;
@Column()
views: number;
@Column()
isPublished: boolean;
}
运行nest程序,npm run start:dev
这时候去navicat就能看到多了一张Photo的表了
以上就完成了简单的nest项目结合TypeOrm创建数据库表单
三、简单的CRUD
photo.modules.ts
...
import { TypeOrmModule } from '@nestjs/typeorm';
import { Photo } from './entities/photo.entity';
@Module({
imports: [TypeOrmModule.forFeature([Photo])],
controllers: [PhotoController],
providers: [PhotoService],
})
export class PhotoModule {}
1、首先写新增接口,这样才能创造数据 photo.service.ts用来处理逻辑
...
import { Photo } from './entities/photo.entity';
export class PhotoService {
constructor(
@InjectRepository(Photo)
private readonly photoRepository: Repository<Photo>,
) {}
// 创建
async create(photo: Partial<Photo>) {
const { name } = photo;
if (!name) {
throw new HttpException('缺少名称', 401);
}
const doc = await this.photoRepository.findOne({ where: { name } });
if (doc) {
throw new HttpException('照片已存在', 401);
}
return await this.photoRepository.save(photo);
}
}
photo.controller.ts
@Post()
async create(@Body() photo) {
return await this.photoService.create(photo);
}
打开postman,post请求接口,这时候我们发现navicat的photo表有了一条数据,成功!
2、查询列表接口 photo.service.ts
export interface PhotoRo {
list: Photo[];
pages: number;
current: number;
size: number;
total: number;
}
// 获取列表
async findAll(query): Promise<PhotoRo> {
const qb = await getRepository(Photo).createQueryBuilder('phote');
qb.where('1=1');
const count = await qb.getCount();
const { pageNum = 1, pageSize = 10, ...params } = query;
qb.limit(pageSize);
qb.offset(pageSize * (pageNum - 1));
const photo = await qb.getMany();
return {
list: photo,
total: count,
pages: Math.ceil(count / pageSize),
current: pageNum,
size: pageSize,
};
photo.controller.ts
@Get()
findAll(@Query() query): Promise<PhotoRo> {
return this.photoService.findAll(query);
}
3、删除接口和更新接口大家可以自己发挥,通过:id,@Delete和@Put
那么到这里我们就简单掌握了nest,前端同学这时候可以建立一个前端项目去请求自己写的接口啦
但我们知道,业务远远不是这么简单, 所以接下来我们要继续深入学习TypeOrm,创建一对一关系,一对多关系,如何使用QueryBuilder等等
Nest非常强大,中间件、拦截器等等,通过实践可以做出自己想要的东西,掌握了后端技术,咱们怼后端也更有借口呀【不是】哈哈哈哈哈
文笔不好,如有疑问,欢迎添加微信交流【回复更及时】