创建项目
//安装脚手架
npm i -g @nestjs/cli
nest new 项目名
连接数据库
//安装驱动
npm i @nestjs/typeorm typeorm pg
在app.module.ts配置数据库连接
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test',
entities: [], // 这里添加你的实体类
synchronize: true, // 注意:生产环境中应该关闭这个选项
}),
],
})
export class AppModule {}
创建模块快捷命令
nest g resource
增删改查
// datum.service.ts
import { Injectable } from '@nestjs/common';
import { InjectEntityManager } from '@nestjs/typeorm';
import { EntityManager } from 'typeorm';
import { Datum } from './entities/datum.entity';
import { Like } from 'typeorm';
@Injectable()
export class DatumService {
constructor(
@InjectEntityManager() private readonly entityManager: EntityManager,
) { }
//查询所有
async findAll(): Promise<Datum[]> {
// 使用 find 方法来查询所有记录
return this.entityManager.find(Datum);
}
//搜索
// async findByStr(str: string): Promise<Datum[]> {
// return this.entityManager.find(Datum, { where: { str: str } });
// }
async findByStr(name: string): Promise<Datum[]> {
return this.entityManager.find(Datum, {
where: {
name: Like(`%${name}%`), // 使用 Like 构造模糊查询,例如 '%value%' 会匹配包含 'value' 的任何字符串
},
});
}
//添加
async createDatum(name: string,num:number,type:string): Promise<Datum> {
const datum = new Datum();
datum.name = name;
datum.num = num;
datum.type = type;
return this.entityManager.save(datum);
}
//删除
async deleteDatumById(id: number): Promise<void> {
await this.entityManager.delete(Datum, { id });
}
//更新
async updateStrById(id: number, newValue: number): Promise<any> {
return await this.entityManager.update(Datum, { id: id }, { num: newValue });
}
async updateDatumById(id: number, updateData: Partial<Datum>) {
try {
const result = await this.entityManager.update(Datum, { id }, updateData);
if (result.affected > 0) {
// 更新成功,可以返回更新后的实体或其他信息
// 注意:TypeORM 的 update 方法不会返回更新后的实体,如果需要,请自行查询
return { message: 'Datum updated successfully', updatedCount: result.affected };
} else {
// 没有记录被更新
return { message: 'No Datum found with the given id', updatedCount: 0 };
}
} catch (error) {
// 处理错误
throw new Error('Failed to update Datum');
}
}
}
//data.controller.ts
import { Controller, Get, Post, Body, Patch, Param, Delete, Query, Put } from '@nestjs/common';
import { DatumService } from './data.service';
import { UpdateDatumDto } from './dto/update-datum.dto';
@Controller('datum')
export class DatumController {
constructor(private readonly datumService: DatumService) { }
//查询所有
@Get('/findAll')
async findAll(): Promise<any> {
return this.datumService.findAll();
}
//搜索
@Get('/findAllByStr')
async findAllByStr(@Query('str') str?: string): Promise<any> {
if (str) {
return this.datumService.findByStr(str);
} else {
// 处理没有传入str的情况
return this.datumService.findAll();
}
}
//添加
@Post('/add')
async create(@Body() strDto: any): Promise<any> {
// 调用服务来添加数据
const createdDatum = await this.datumService.createDatum(strDto.name,strDto.num,strDto.type);
return { message: 'Datum created successfully', data: createdDatum };
}
//删除
@Post('/delete')
async deleteById(@Body() deleteDatumDto: any): Promise<void> {
await this.datumService.deleteDatumById(deleteDatumDto.id);
}
//修改
@Post('/update')
async update(@Body() UpdateDatumDto: any): Promise<void> {
await this.datumService.updateStrById(UpdateDatumDto.id,UpdateDatumDto.str);
}
@Put('/put/:id')
async updateDatum(
@Param('id') id: number,
@Body() updateData: Partial<any>,
) {
return this.datumService.updateDatumById(id, updateData);
}
}