《Nest系列 - 4. 听说人人都会CRUD,可是我还不会怎么办???-《4.2结合前端使用实现CRUD》

终于到了这一步,今天我们就将实现一个CRUD,主要是编写nest 部分,前端部分后面可以看git 代码
下面是效果演示(大部分是参考满哥实现,🤣🤣🤣)

在这里插入图片描述

前期准备

前端接口处理

import axios from 'axios'
axios.defaults.baseURL = 'http://127.0.0.1:3000' // 服务器地址,就是nest 项目的运行地址
// 添加用户
export const addUser = (data) => axios.post('/user', data).then(res => res.data)
// 获取列表:可以通过参数查询
export const getList = (data) => axios.get('/user', { params: data }).then(res => res.data)
// 根据id 删除用户
export const delUser = (data) => axios.delete(`/user/${data.id}`).then(res => res.data)
// 根据id 更新用户信息
export const updateUser = (data) => axios.patch(`/user/${data.id}`, data).then(res => res.data)

通过前端的接口请求,我们知道要访问/user 地址,那么对应的Nest的 controller 就知道怎么回事了,并且入参和出参 前端和后端都是 一一匹配的

Nest 处理

controller 层

import { Controller, Get, Post, Body, Patch, Param, Delete, Query, HttpCode } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';@Controller('user') // 匹配user 路由
export class UserController {constructor(private readonly userService: UserService) {}/*** 新增用户数据* @param createUserDto 参数* @returns */@Post()creates(@Body() createUserDto: CreateUserDto) {return this.userService.create(createUserDto);}/*** 获取列表数据* @param query 查询参数,* @param page 当前页码* @param pageSize 每页显示条数*  @param keyWord 关键字* @returns */@Get()async findAll (@Query() query:{keyWord: string, page: number, pageSize: number}) {return  await this.userService.findAll(query);}/*** 更新根据用户id,跟新数据* @param id  用户id* @param updateUserDto 参数* @returns */@Patch(':id')update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {return this.userService.update(+id, updateUserDto);}/*** 根据用户id 删除用户* @param id 用户id* @returns */@Delete(':id')remove(@Param('id') id: string) {return this.userService.remove(+id);}
}

上面controller 层口就是接口地址匹配,怎么解析客户端传来的数据,然后将解析出来的参数,传递给server层做具体的数据库操作

server层

// 使用InjectRepository装饰器并引入Repository即可使用typeorm的操作
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import { Like, Repository } from 'typeorm';@Injectable()
export class UserService {constructor(@InjectRepository(User)private readonly usersRepository: Repository<User>,) { }/*** * @param createUserDto 入参* @returns  创建用户*/create(createUserDto: CreateUserDto) {const data = new User()data.name = createUserDto.namedata.age = createUserDto.agereturn this.usersRepository.save(data)}/*** * @param query  查询参数* @returns  查询用户*/async findAll(query:{keyWord: string, page: number, pageSize: number }) {// Like 用于模糊查询const data =  await this.usersRepository.find({where: {name: Like(`%${query.keyWord}%`)},order: {id: "DESC"},skip: (query.page - 1)* query.pageSize,take: query.pageSize,})const total = await this.usersRepository.count({where: {name: Like(`%${query.keyWord}%`)},})return {data,total}}/*** * @param id 用户id* @param updateUserDto  入参* @returns   更新用户信息*/update(id: number, updateUserDto: UpdateUserDto) {return this.usersRepository.update(id, updateUserDto)}
/*** * @param id 用户id* @returns  删除用户*/remove(id: number) {return this.usersRepository.delete(id)}
}

server 层就是 接收controller 传递来的参数,然后利用InjectRepository 和 Repository 来操作相应的CRUD的方式即可

比如

新增数据: 直接调用 save(),

查找数据: 直接调用 find()

更新数据: 直接调用 update()

删除数据: 直接调用 delete()

是不是感觉so easy

image.png

跨域处理

这个就是服务端容许那个地址,方法来访问,这里就是容许的前端的访问地址


// 启用 CORSapp.enableCors({origin: 'http://localhost:3000', // 允许访问的来源,前端项目的访问地址methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS', // 允许的 HTTP 方法credentials: true, // 允许发送凭据(如 Cookie 等)});

项目地址

  • Vue 前端地址:
    https://gitee.com/Big_Cat-AK-47/vue-project

  • nest 后端地址:https://gitee.com/Big_Cat-AK-47/nest

总结

  • 服务端在controller 层定义好路由信息(接口地址),在server 层做逻辑处理,将数据返回给客户端
  • 前端根据路由匹配后端地址,通过网络请求库做数据请求
  • 前端传递参数,后端接收参数,通过装饰器解析,解析出参数,再传递给server 层做逻辑处理
  • server 层 通过typeOrm 库做数据库的增删改查,主要就是savefindupdatedelete
  • 如果想做一些数据库的查询,可以利用一些关键字来实现where Like等,详细更多可以查看官网https://typeorm.bootcss.com/working-with-entity-manager

Nest 系列 往期文章

1. 《Nest系列 - 1. 🔥运行一个Nest项目以及整体目录学习》

2. 《Nest系列 - 2. 🔥Nest 代码生成器,让你告别base代码书写!!!》

3. 《 Nest系列 - 3. 🔥掌握常见Nest 装饰器,奠定坚实基础!!!!!!》

4. 《Nest系列 - 4. 🔥听说人人都会CRUD,可是我还不会怎么办???-《 4.1-数据库连接和实体》》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RT-Thread Studio实现动态线程

1创建项目 我的板子为STM32F03ZET6 点击RT-Thread项目 2选择板子&#xff08;根据自己的板子选择&#xff09; 3找到主函数 4编写代码 4-1创建函数入口 // 线程入口函数 static void thread_entry(void *parameter) {rt_uint32_t count 0;while (1){// 线程执行的代码rt_k…

互斥锁并不能保证任务不能被调度

互斥锁不能保证在临界区的时候&#xff0c;不发送任务调度&#xff0c;所以为了保护共享的资源不被调度访问&#xff0c;需要在两个线程都加互斥锁来保证任务不调度 #include <stdio.h> #include <pthread.h> #include <unistd.h> int shared_resource 0;p…

2025中国(宁波)出口跨境电商博览会

2025中国(宁波)出口跨境电商博览会 时间&#xff1a;2025年5月28-30日 地点&#xff1a;中国宁波国际会展中心 组织单位&#xff1a; 宁波欧德国际商务咨询服务有限公司 凤麟展览(宁波)有限公司 宁波市跨境电子商务协会 宁波市家居产业协会 详询主办方陆先生 I38&…

【openmpi】怎样使用openmpi并行运行python脚本?

创作日志&#xff1a; 装过一次openmpi&#xff0c;但是半年之后就忘记怎么用了&#xff0c;所以记录一下 1. 测试openmpi是否安装好 cd /home/xxxx/SnapHiC_Call_Loop/openmpi-4.1.6/examples make mpirun -np 4 hello_c得到如下输出就说明是装好的了 2. 没有导入路径的话导…

rtthread stm32h743的使用(十)i2c设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.打开cubemux&#xff0c;设置外部时钟及串口外设…

制造业采购堡垒机的四大必要性看这里!

制造业包括的行业广泛&#xff0c;与大家的生活息息相关&#xff0c;例如食品制造业、汽车制造业、纺织业、服装制造业等等。但大家对于制造业不是很了解&#xff0c;不知道制造业也是需要采购堡垒机的&#xff0c;今天我们就来聊聊制造业采购堡垒机的必要性。 制造业采购堡垒机…

python selenium 下载

查看浏览器版本 下载地址&#xff1a; 新版本下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 历史版本也可以用这个下载地址 http://chromedriver.storage.googleapis.com/index.html 找到对应的版本 126.0.xxx 下载

推荐给中小学生的暑假打字神器

暑假是孩子们放松身心、增长知识的好时机。在这个漫长的假期里&#xff0c;家长们不仅希望孩子能够快乐地度过每一天&#xff0c;还希望他们能在学习上有所进步。尤其是随着科技的发展&#xff0c;熟练的打字技巧已经成为现代学习和工作的基本技能之一。今天&#xff0c;我要向…

节流工具,避免操作太频繁

ThrottleUtil 用于保证某个操作在一定时间内只执行一次的工具。 package com.cashpro.kash.lending.loan.utils;/*** <pre>* Created by zhuguohui* Date: 2024/6/26* Time: 13:43* Desc:用于节流执行任务,限制任务执行的频次* </pre>*/import android.os.Handle…

基于requests模块爬取网易云歌曲评论并制作热词云图

本实践大作业要求 本次实践大作业主要要求主要包括&#xff1a; 1、选择一个热点或者你感兴趣的主题作为本次爬虫实践作业要完成的任务。 2、为了完成本次任务&#xff0c;需要确定从网上爬取的数据对象与范围。 3、利用python及网络爬虫相关技术实现从网上爬取相应内容数据。 …

nvm-desktop window安装,支持动态切换nodejs版本

一、安装 nvm-desktop 概述 1 、卸载干净笔记的nodejs 和nodejs的环境变量 2、安装 nvm-desktop 软件 3、配置环境变量 4、测试功能 # 此时已安装完成 其他&#xff1a;常见nodejs的问题解决参考&#xff1a;官网 mac 安装教程 https://github.com/1111mp/nvm-desktop/blob/…

【揭秘新潮流】实践教学新宠SmartEDA,让电子设计课“潮“起来!

在信息时代的浪潮下&#xff0c;电子设计课程早已不再是枯燥乏味的代名词。随着技术的飞速发展&#xff0c;一种名为SmartEDA的实践教学新选择正逐渐崭露头角&#xff0c;为电子设计课程注入了前所未有的活力与趣味性。今天&#xff0c;就让我们一起走进SmartEDA的世界&#xf…

二维数组广度优先遍历-腐烂的苹果

一、问题描述 二、解题思路 此问题通过广度优先遍历来解决&#xff0c;模拟苹果发霉变坏的过程 1.初始时遍历网格&#xff0c;借助队列来储存所有发霉的苹果&#xff0c;统计好苹果个数 2.每一分钟队列内发霉苹果都会对周围的苹果起作用&#xff08;向外部扩散&#xff09;&am…

照片变漫画怎么弄?这5个照片变漫画方法超简单

在艺术和社交融合的现在&#xff0c;将照片转换为漫画风格已经成为一种流行趋势。 无论是为了创造个性化的头像&#xff0c;还是制作有趣的社交媒体帖子&#xff0c;拥有一款能够将照片转换为漫画的软件将极大地丰富你的创意表达。 下面&#xff0c;本文将介绍几款能够实现这…

Day34:LeedCode 56. 合并区间 738.单调递增的数字 968.监控二叉树

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…

数学建模 —— MATLAB中的矩阵(上)

目录 矩阵的创建方法 (1)直接输入法 (2)函数创建法 (3)导入本地文件中的数据 矩阵元素的引用 矩阵元素的修改和删除 矩阵的创建方法 在MATLAB中&#xff0c;矩阵的创建方法主要有三种&#xff0c;分别是&#xff1a;直接输入法、函数创建法和导入本地文件中的数据。 (1)直…

Python 爬虫从入门到入狱之路一

实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在之前写的爬虫程序中&#xff0c;都只是获取…

Ubuntu24.04下安装docker,并pull ubuntu22.04,然后编译安装vpp

一、docker安装说明 解决官方源无法下载的问题 二、使用步骤 1.更新软件包索引 sudo apt update2.安装必要的软件包&#xff0c;以允许apt通过HTTPS使用仓库 sudo apt install apt-transport-https ca-certificates curl software-properties-common3.添加Docker的官方GPG…

CNware快照技术采用双轨服务模式,显著改善虚拟机快照执行时执行后性能下降问题|附技术原理

在数字化时代&#xff0c;虚拟化技术已成为数据中心管理与云计算领域的基石。虚拟化技术允许在单一物理服务器上运行多个独立的虚拟环境&#xff0c;即虚拟机。每个虚拟机都能拥有专属的操作系统、应用程序和配置&#xff0c;彼此隔离&#xff0c;互不影响。然而&#xff0c;如…

易天智能eHR管理平台 CreateUser 任意用户添加漏洞复现

0x01 产品简介 易天智能eHR管理平台是一款功能全面、智能化的人力资源管理软件,旨在帮助企业提高人力资源管理效率和管理水平。该平台通过集成员工信息、薪酬管理、档案人事管理、绩效管理和招聘管理等多个模块,实现了人力资源管理的全面智能化管理。 0x02 漏洞概述 易天智…