首页 > 其他分享 >小满nestjs(第二十六章 nestjs 第一个CURD)

小满nestjs(第二十六章 nestjs 第一个CURD)

时间:2023-01-17 14:38:52浏览次数:51  
标签:axios const 小满 CURD nestjs import data id user


来了来了他来了 我们学了这么久的第一个CURD

前端Vue3 ts Element ui  axios

<template>
<div class="wraps">
<div>
<el-input v-model="search.keyWord" style="width:300px;"></el-input>
<el-button @click="init" style="margin-left:10px;">搜索</el-button>
<el-button @click="openDialog" type="primary" style="margin-left:10px;">添加</el-button>
</div>
<el-table border :data="tableData" style="width: 100%;margin-top: 30px;">
<el-table-column prop="name" label="名字" />
<el-table-column prop="desc" label="描述" />
<el-table-column prop="id" label="id" />
<el-table-column>
<template #default="scope">
<el-button @click="edit(scope.row)">编辑</el-button>
<el-button @click="deleteRow(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination @current-change="changeSize" style="float:right;margin-top:10px;" background layout="prev, pager, next" :total="total" />
</div>

<el-dialog v-model="dialogVisible" title="弹框" width="50%">
<el-form :model="form">
<el-form-item prop="name" label="名称">
<el-input v-model="form.name" placeholder="名称" />
</el-form-item>
<el-form-item prop="desc" label="描述">
<el-input v-model="form.desc" placeholder="描述">
</el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="close">关闭</el-button>
<el-button type="primary" @click="save">
保存
</el-button>
</span>
</template>
</el-dialog>
</template>

<script setup lang='ts'>
import { ref, reactive } from 'vue'
import type { FormInstance } from 'element-plus'
import { addUser, updateUser, delUser, getList } from '@/server'
const total = ref<number>(0)
//搜索框
const search = reactive({
keyWord: "",
page:1,
pageSize:10
})
//表单
const form = reactive({
name: "",
desc: "",
id: 0
})
//清空数据
const resetForm = reactive({ ...form })
//表格数据
const tableData = ref([])
//弹框开关
const dialogVisible = ref<boolean>(false)
const openDialog = () => {
dialogVisible.value = true;
Object.assign(form, resetForm)
}
//初始化表格数据
const init = async () => {
const list = await getList(search)
tableData.value = list?.data ?? []
total.value = list?.total ?? 0
}
init()
const changeSize = (page) => {
search.page = page
init()
}
//保存 和修改 表格数据
const save = async () => {
if (form.id) {
await updateUser(form)
} else {
await addUser(form)
}

close()
init()
}
//删除表格数据
const deleteRow = async (row) => {
await delUser({ id: row.id })
init()
}
//获取 详情
const edit = (row: any) => {
dialogVisible.value = true;
Object.assign(form, row)
}
//关闭弹框
const close = () => {
dialogVisible.value = false;
}
</script>

<style lang='less'>
* {
padding: 0;
margin: 0;
}

html,
body {
background: #ccc;
}

.wraps {

height: 100vh;
padding: 30px;
}
</style>

axios 接口定义

import axios from 'axios'

axios.defaults.baseURL = 'http://localhost:3000'

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)

export const delUser = (data) => axios.delete(`/user/${data.id}`).then(res => res.data)

export const updateUser = (data) => axios.patch(`/user/${data.id}`,data).then(res => res.data)

后端Nestjs

import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}

@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}

@Get()
findAll(@Query() query:{keyWord:string,page:number,pageSize:number}) {
return this.userService.findAll(query);
}


@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.userService.update(+id, updateUserDto);
}

@Delete(':id')
remove(@Param('id') id: string) {
return this.userService.remove(+id);
}
}

service

1.引入 InjectRepository typeOrm 依赖注入 接受一个实体

2.引入类型 Repository 接受实体泛型

3.Like 用于模糊查询

4.save 保存  find 查询 update 更新 delete 删除

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Repository, Like } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
@Injectable()
export class UserService {
constructor(@InjectRepository(User) private readonly user: Repository<User>) { }
create(createUserDto: CreateUserDto) {
const data = new User()
data.name = createUserDto.name
data.desc = createUserDto.desc
return this.user.save(data)
}

async findAll(query: { keyWord: string, page: number, pageSize: number }) {
const data = await this.user.find({
where: {
name: Like(`%${query.keyWord}%`)
},
order: {
id: "DESC"
},
skip: (query.page - 1)* query.pageSize,
take:query.pageSize,
})
const total = await this.user.count({
where: {
name: Like(`%${query.keyWord}%`)
},
})
return {
data,
total
}
}

update(id: number, updateUserDto: UpdateUserDto) {
return this.user.update(id, updateUserDto)
}

remove(id: number) {
return this.user.delete(id)
}
}

Module

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import {TypeOrmModule} from '@nestjs/typeorm'
import { User } from './entities/user.entity';
@Module({
imports:[TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService]
})
export class UserModule {}

DTO

export class CreateUserDto {
name:string

desc:string
}

标签:axios,const,小满,CURD,nestjs,import,data,id,user
From: https://blog.51cto.com/u_13463935/6017244

相关文章

  • 小满nestjs(第十六章 nestjs 响应拦截器)
    拦截器拦截器具有一系列有用的功能,这些功能受面向切面编程(AOP)技术的启发。它们可以:在函数执行之前/之后绑定额外的逻辑转换从函数返回的结果转换从函数抛出的异常扩展基本函......
  • 小满nestjs(第十八章 nestjs 管道转换)
    管道可以做两件事1.转换,可以将前端传入的数据转成成我们需要的数据2.验证类似于前端的rules配置验证规则我们先来讲一下转换Nestjs提供了八个内置转换API​​Validatio......
  • 小满nestjs(第二十二章 nestjs 自定义装饰器)
    在Nestjs中我们使用了大量装饰器decorator,所以Nestjs也允许我们去自定义装饰器。 案例1自定义权限装饰器生成装饰器 nestgd[name]import{SetMetadata}from'@......
  • 小满nestjs(第二十章 nestjs 爬虫)
    其实爬虫是一个对计算机综合能力要求比较高的技术活。首先是要对网络协议尤其是 ​​http​​ 协议有基本的了解,能够分析网站的数据请求响应。学会使用一些工具,简单的情......
  • 小满nestjs(第十九章 nestjs 管道验证DTO)
    1.先创建一个pipe验证管道nestgpi文件名字 创建好之后的 2.安装验证器npmi--saveclass-validatorclass-transformerimport{IsNotEmpty,IsString}from'class-va......
  • 小满nestjs(第十七章 nestjs 异常拦截器)
    上一章我们讲了全局响应拦截,这一章我们来讲一下全局异常拦截器common下面新建filter.ts让我们创建一个异常过滤器,它负责捕获作为​​HttpException​​​类实例的异常,并为它......
  • 小满nestjs(第二十三章 nestjs swagger接口文档)
    swagger用于提供给前端接口文档安装命令如下npminstall@nestjs/swaggerswagger-ui-express在main.ts注册swaggerasyncfunctionbootstrap(){constapp=awaitNe......
  • 小满Vue3第四十六章(Proxy跨域)
    1.首先我们先了解一下什么是跨域主要是出于浏览器的同源策略限制,它是浏览器最核心也最基本的安全功能。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不......
  • 小满nestjs(第二十七章 nestjs typeOrm关系)
    在我们开始的过程中,肯定不会把数据存在一个表里面,我们会进行分表,把数据分开存,然后通过关联关系,联合查询。typeOrm文档 ​​一对一|TypeORM中文文档​​前端代码还是复......
  • 小满Vue3第四十五章(Vue3 Web Components)
    什么是 WebComponentsWebComponents提供了基于原生支持的、对视图层的封装能力,可以让单个组件相关的javaScript、css、html模板运行在以html标签为界限的局部环境中,不......