Nest NodeJs后端框架使用

107 阅读2分钟

创建项目

//安装脚手架
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);  
  }

 }