文章分类管理接口

目录

前言

新建表

获取文章分类列表接口

初始化路由模块

将路由对象导出并使用

初始化路由对象处理函数

修改路由代码

导入数据库

定义sql语句

调用db.query()

完整的获取文章分类列表处理函数

新增文章分类接口

定义路由和处理函数

验证表单数据

查询分类名称与别名是否被占用

实现新增文章分类的功能

新增文章分类完整处理函数

根据id删除文章分类接口

定义路由和处理函数

验证表单数据

实现删除文章分类的功能

根据 Id 更新文章分类数据接口

定义路由和处理函数

验证表单数据

查询分类名称与别名是否被占用

实现更新文章分类的功能


前言

本文包含获取文章分类列表接口新增文章分类接口根据id删除文章分类接口根据id获取文章分类数据接口根据id更新文章分类数据接口

新建表

获取文章分类列表接口

初始化路由模块
// 创建路由对象
const express = require('express')
const router = express.Router()router.get('/cates',(req,res)=>{res.send('获取分类成功')
})// 向外导出路由对象
module.exports=router
将路由对象导出并使用

在服务器中

// 导入并使用获取文章列表信息
const artcateRouter = require('./router/artcate')
app.use('/my/article',artcateRouter)

使用postman模拟发送请求

初始化路由对象处理函数
// 向外导出获取文章列表处理函数
exports.getArticleCates=(req,res)=>{res.send('获取成功')
}
修改路由代码
// 获取文章分类的列表数据
router.get('/cates',artcate_handler.getArticleCates)

postman验证

导入数据库
// 导入数据库操作模块
const db = require('../db/index')
定义sql语句
const sql = 'select * from ev_article_cate where is_delete=0 order by id asc'
调用db.query()
db.query(sql,(err,results)=>{// 验证sql语句是否执行if(err) return res.send({status:1,message:err.message})res.send({status:0,message:'获取文章列表成功',data:results})})
完整的获取文章分类列表处理函数
// 向外导出获取文章列表处理函数
exports.getArticleCates=(req,res)=>{const sql = 'select * from ev_article_cate where is_delete=0 order by id asc'db.query(sql,(err,results)=>{// 验证sql语句是否执行if(err) return res.send({status:1,message:err.message})res.send({status:0,message:'获取文章列表成功',data:results})})
}

使用postman模拟发起请求

数据库中的信息

返回的数据

新增文章分类接口

定义路由和处理函数
// 新增文章分类的路由
router.post('/addcates', artcate_handler.addArticleCates)

处理函数

// 新增文章分类的处理函数
exports.addArticleCates = (req, res) => {res.send('新增成功')
}

postman验证接口

验证表单数据

创建文章分类数据验证模块,并定义验证规则

// 导入定义验证规则的模块
const joi = require('@hapi/joi')// 定义 分类名称 和 分类别名 的校验规则
const name = joi.string().required()
const alias = joi.string().alphanum().required()// 校验规则对象 - 添加分类
exports.add_cate_schema = {body: {name,alias,},
}

对数据进行验证

// 导入验证数据的中间件
const expressJoi = require('@escook/express-joi')
// 导入文章分类的验证模块
const { add_cate_schema } = require('../schema/artcate')// 新增文章分类的路由
router.post('/addcates', expressJoi(add_cate_schema), artcate_handler.addArticleCates)
查询分类名称与别名是否被占用

定义sql语句

 const sql = 'select * from ev_article_cate where name=? or alias=?'

调用db.query()执行查重操作

db.query(sql,[req.body.name,req.body.alias],(err,results)=>{// sql语句是否成功执行if(err) return res.send({status:1,message:err.message})// 名字和类名都被占用if(results.length === 2) return res.send({status:1,message:'类名与别名被占用'})// 名字和类名都被占用if(results.length === 1 && results[0].name === req.body.name && results[0].alias === req.body.alias) return res.send({status:1,message:'类名和别名被占用'})// 名字被占用if(results.length === 1 && results[0].name === req.body.name) return res.send({status:1,message:'类名被占用'})// 类名被占用if(results.length === 1 && results[0].alias === req.body.alias) return res.send({status:1,message:'别名被占用'})res.send('新增成功')})

使用postman验证

数据库中

当新增类名和别名与数据库中相同时

类名相同时

别名相同时

没有重复时

实现新增文章分类的功能

定义sql语句

const sql = 'insert ev_article_cate set ?'

调用db.query()新增文章分类

 db.query(sql,req.body,(err,results)=>{// 判断sql语句是否执行成功if(err) return res.send({status:1,message:err.message})if (results.affectedRows !== 1) return res.send({status:1,message:'新增文章分类失败'})res.send({status:0,message:'新增成功'})})
新增文章分类完整处理函数
// 向外导出新增文章列表处理函数
exports.addArticleCates=(req,res)=>{const sql = 'select * from ev_article_cate where name=? or alias=?'db.query(sql,[req.body.name,req.body.alias],(err,results)=>{// sql语句是否成功执行if(err) return res.send({status:1,message:err.message})// 名字和类名都被占用if(results.length === 2) return res.send({status:1,message:'类名与别名被占用'})// 名字和类名都被占用if(results.length === 1 && results[0].name === req.body.name && results[0].alias === req.body.alias) return res.send({status:1,message:'类名和别名被占用'})// 名字被占用if(results.length === 1 && results[0].name === req.body.name) return res.send({status:1,message:'类名被占用'})// 类名被占用if(results.length === 1 && results[0].alias === req.body.alias) return res.send({status:1,message:'别名被占用'})const sql = 'insert ev_article_cate set ?'db.query(sql,req.body,(err,results)=>{// 判断sql语句是否执行成功if(err) return res.send({status:1,message:err.message})if (results.affectedRows !== 1) return res.send({status:1,message:'新增文章分类失败'})res.send({status:0,message:'新增成功'})})})}

使用postman验证是否新增成功

在mysql数据库中

成功插入

根据id删除文章分类接口

定义路由和处理函数
router.get('/deletecate/:id',(req,res)=>{res.send('删除成功')
})

处理函数

// 向外导出根据id删除文章分类处理函数
exports.deleteArticleCates=(req,res)=>{res.send('删除成功')
}

修改路由

// 根据id删除文章分类
router.get('/deletecate/:id',artcate_handler.deleteArticleCates)

使用postman验证

注意需要在参数中携带id参数

验证表单数据

在规则定义模块中,定义id的校验规则

// 定义id的校验规则
const id = joi.number().integer().min(1).required()

向外共享校验对象

注意,这里是get请求,所以是params

exports.delete_cate_schema = {params: {id,},}

导入需要验证的对象

// 导入删除分类的验证规则对象
const { delete_cate_schema } = require('../schema/artcate')

路由中验证

// 根据id删除文章分类
router.get('/deletecate/:id',expressJoi(delete_cate_schema),artcate_handler.deleteArticleCates)
实现删除文章分类的功能

定义sql语句

直接删除数据过于危险,这里修改数据的状态码来表示删除

const sql = 'update ev_article_cate set is_delete=1 where id=?'

调用db.query()

 db.query(sql,req.params.id,(err,results)=>{// sql语句执行不成功if(err) return res.send({status:1,message:err.message})if(results.affectedRows!==1) return res.send({status:1,message:'删除文章分类失败'})res.send({status:0,message:'删除文章分类成功'})})

完整的根据id删除文章分类处理函数

// 向外导出根据id删除文章分类处理函数
exports.deleteArticleCates=(req,res)=>{const sql = 'update ev_article_cate set is_delete=1 where id=?'db.query(sql,req.params.id,(err,results)=>{// sql语句执行不成功if(err) return res.send({status:1,message:err.message})if(results.affectedRows!==1) return res.send({status:1,message:'删除文章分类失败'})res.send({status:0,message:'删除文章分类成功'})})
}

使用postman验证

原数据库中

发送删除请求后

在数据库中

根据 Id 更新文章分类数据接口

定义路由和处理函数

处理函数

// 向外导出根据id更新文章分类处理函数
exports.updateArticleCates=(req,res)=>{res.send('更新成功')
}

定义路由

// 根据id更新文章分类数据
router.post('/updateCate',artcate_handler.updateArticleCates)

postman验证

验证表单数据

在定义规则模块中定义规则并共享验证对象

 // 校验规则对象 - 更新分类
exports.update_cate_schema = {body: {Id: id,name,alias,},}

导入需要验证的对象,并在路由中验证

// 导入更新文章分类的验证规则对象
const { update_cate_schema } = require('../schema/artcate')// 根据id更新文章分类数据
router.post('/updateCate',expressJoi(update_cate_schema),artcate_handler.updateArticleCates)
查询分类名称与别名是否被占用

定义sql语句

在数据库中查找是否有相同的类名和别名,所以应该在除去用户传过来的id以外的数据中查找

const sql = 'select * from ev_article_cate where id<>? and (name=? or alias=?)'

调用db.query()

db.query(sql,[req.body.id,req.body.name,req.body.alias],(err,results)=>{if(err) return res.send({status:1,message:err.message})if(results.length === 2) return res.send({status:1,message:'类名和别名被占用,请重新更换'})if(results.length === 1 && results[0].name === req.body.name && results[0].alias === req.body.alias) return res.send({status:1,message:'类名和别名被占用,请重新更换'})if(results.length === 1 && results[0].name === req.body.name) return res.send({status:1,message:'类名被占用,请更换类名'})if(results.length === 1 && results[0].alias === req.body.alias) return res.send({status:1,message:'别名被占用,请更换别名'})res.send('更新成功')})
实现更新文章分类的功能

定义sql语句

const sql = `update ev_article_cate set ? where Id=?`

调用db.query()

db.query(sql,[req.body,req.body.Id],(err,results)=>{if(err) return res.send({status:1,message:err.message})if(results.affectedRows!==1) return res.send({satus:1,message:'更新失败'})res.send({status:0,message:'更新成功'})})

完整根据id更新文章分类数据的处理函数

// 向外导出根据id更新文章分类处理函数
exports.updateArticleCates=(req,res)=>{// 在数据库中查找是否有相同的类名和别名,所以应该在除去用户传过来的id以外的数据中查找const sql = 'select * from ev_article_cate where id<>? and (name=? or alias=?)'db.query(sql,[req.body.Id,req.body.name,req.body.alias],(err,results)=>{if(err) return res.send({status:1,message:err.message})if(results.length === 2) return res.send({status:1,message:'类名和别名被占用,请重新更换'})if(results.length === 1 && results[0].name === req.body.name && results[0].alias === req.body.alias) return res.send({status:1,message:'类名和别名被占用,请重新更换'})if(results.length === 1 && results[0].name === req.body.name) return res.send({status:1,message:'类名被占用,请更换类名'})if(results.length === 1 && results[0].alias === req.body.alias) return res.send({status:1,message:'别名被占用,请更换别名'})const sql = `update ev_article_cate set ? where Id=?`db.query(sql,[req.body,req.body.Id],(err,results)=>{if(err) return res.send({status:1,message:err.message})if(results.affectedRows!==1) return res.send({satus:1,message:'更新失败'})res.send({status:0,message:'更新成功'})})})}

使用postman

数据库中的数据

当类名重复时

别名重复时

没有重复时

数据库中数据被更新

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

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

相关文章

UDP网络编程的接受与发送信息

/发送端B>可以接受数据 public class UDPSenderB {public static void main(String[] args) throws IOException {//创建一个DatagramSocket 对象&#xff0c;准备发送和接受数据DatagramSocket socket new DatagramSocket(9998);//将需要发送的数据&#xff0c;封装到Data…

空号检测API如何助力于提高客户关系管理

引言 在现代商业世界中&#xff0c;客户关系管理已经成为企业成功的关键要素之一。CRM不仅涉及到如何吸引新客户&#xff0c;还包括如何维护并与现有客户建立持久而有益的关系。在这个过程中&#xff0c;通信是至关重要的。为了确保您的客户数据库保持最新和准确&#xff0c;空…

navicat15 恢复试用方法

1.运行&#xff0c;输入regedit&#xff0c;打开注册表 2.注册表中搜索 HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium&#xff0c;删除下面的Registration15XCS文件夹 3.注册表中再搜索 HKEY_CURRENT_USER\Software\Classes\CLSID 然后拉到文件夹目录的最后&#x…

「永不失联」产品创新与升级系列发布,预约直播“即将发车”

数字化浪潮下&#xff0c;北斗时空智能正成为我国重要的新型基础设施。 通过将卫星定位精度提升至厘米级乃至毫米级&#xff0c;时空智能满足了数字化时代智能驾驶、共享出行、智慧城市等多种智能终端对时空信息的爆发式增长需求&#xff0c;同步印证着测绘地理信息领域的技术应…

什么是Vue.js中的指令(directive)?举例说明一些常见的指令。

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Azure机器学习 - 使用与Azure集成的Visual Studio Code实战教程

本文介绍如何启动远程连接到 Azure 机器学习计算实例的 Visual Studio Code。 借助 Azure 机器学习资源的强大功能&#xff0c;使用 VS Code 作为集成开发环境 (IDE)。 在VS Code中将计算实例设置为远程 Jupyter Notebook 服务器。 关注TechLead&#xff0c;分享AI全维度知识。…

Spring本地jar包依赖项目改为maven依赖

1.简介 我们在做项目的时候&#xff0c;可能会偶尔接手较为古老的项目&#xff0c;这些项目使用了较为老旧的版本管理或依赖管理方法&#xff0c;对于新开发项目来说&#xff0c;这些老旧的依赖管理方式会影响开发效率&#xff0c;所以&#xff0c;一般我们会选择将老项目的依…

JavaEE入门介绍,HTTP协议介绍,常用状态码及含义,服务器介绍(软件服务器、云服务器)

一、JavaEE入门 JavaEE&#xff08;Java Enterprise Edition&#xff09;&#xff0c;Java企业版&#xff0c;是一个用于企业级web开发&#xff08;不需要使用控制台&#xff09;平台。最早由Sun公司定制并发布&#xff0c;后由Oracle负责维护。 JavaEE平台规范了在开发企业级w…

NB-IOT的粮库挡粮门异动监测装置

一种基于NBIOT的粮库挡粮门异动监测装置,包括若干个NBIOT开门监测装置,物联网后台管理系统,NBIOT低功耗广域网络和用户访问终端;各个NBIOT开门监测装置通过NBIOT低功耗广域网络与物联网后台管理系统连接,物联网后台管理系统与用户访问终端连接.NBIOT开门监测装置能够对粮库挡粮…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

Ubuntu安装ddns-go使用阿里ddns解析ipv6

Ubuntu安装ddns-go 1.何为ddns-go2.安装环境3.获取ddns-go安装包4.解压ddns-go5.安装ddns-go6.配置ddns-go 1.何为ddns-go DDNS-GO是简单好用的DDNS&#xff0c;它可以帮助你自动更新域名解析到公网IP。比如你希望在本地部署网站&#xff0c;但是因为公网IP是动态的&#xff0…

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…

854数据结构简答题---图

1.&#xff08;2015期末&#xff09;已知无环路有向图如图3.1,请在表2、表3中填写出各事件的最早发生时间、最迟发生时间、活动的最早、最迟开始时间&#xff0c;给出关键活动及关键路径。 从源点到汇点的有向路径可能有多条&#xff0c;所有路径中&#xff0c;具有最大路径长…

CodeWhisperer 初体验

文章作者&#xff1a;1颗 orange 最近用了一个叫 CodeWhisperer 的插件&#xff0c;这个软件对于来说开发人员&#xff0c;插件有好多实用的功能&#xff0c;编码更高效&#xff0c;代码质量也提升了很多。 CodeWhisperer 简介 CodeWhisperer 是亚⻢逊出品的一款基于机器学习…

SRA ToolKit (sra-tools) 的安装和使用

文章目录 前言从哪里下载 SRA ToolKit如何安装怎么用 前言 事情的起因是从NCBI SRA Database下载数据时的一个报错&#xff1a;   path not found while resolving tree within virtual file system module - SRR17****** cannot be found 上次下载数据的时候还是上次&…

Kafka设计原理详解

Kafka核心总控制器Controller 在Kafka集群中会有一个或者多个broker&#xff0c;其中有一个broker会被选举为控制器&#xff08;Kafka Controller&#xff09;&#xff0c;它负责管理整个集群中所有分区和副本的状态。 当某个分区的leader副本出现故障时&#xff0c;由控制器…

Leetcode刷题详解——下降路径最小和

1. 题目链接&#xff1a;931. 下降路径最小和 2. 题目描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择…

SpringBoot集成与应用Neo4j

文章目录 前言集成使用定义实体配置定义Repository查询方法方式一&#xff1a;Query方式二&#xff1a;Cypher语法构建器方式三&#xff1a;Example条件构建器方式四&#xff1a;DSL语法 自定义方法自定义接口继承自定义接口实现自定义接口neo4jTemplateNeo4jClient 自定义抽象…

Visual Studio(VS)C++项目 管理第三方依赖库和目录设置

发现很多程序员存在这种做法&#xff1a;把项目依赖的第三方库的lib和dll放在项目目录下&#xff0c;或者复制到输出目录&#xff0c;因为每种配置都有不同的输出目录&#xff0c;所以要复制多份&#xff08;至少包括Debug和Release两个输出目录&#xff09;&#xff0c;这些做…

MySQL -- 表的增删查改

MySQL – 表的增删查改 文章目录 MySQL -- 表的增删查改一、Create创建1.插入数据2.插入否则更新3.替换 二、Retrieve查找1.select列1.1.全列查询1.2.指定列查询1.3.查询字段为表达式1.4.为查询结果指定别名1.5.结果去重 2.where条件2.1.英语不及格的同学&#xff08;英语<6…