当前位置: 首页 > article >正文

文章分类管理接口

目录

前言

新建表

获取文章分类列表接口

初始化路由模块

将路由对象导出并使用

初始化路由对象处理函数

修改路由代码

导入数据库

定义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.kler.cn/a/108165.html

相关文章:

  • kafka消费数据太慢了,给优化下
  • Linux设置socks代理
  • C#程序开发,检测当前电脑已经安装的软件目录
  • LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略
  • 使用HTML、CSS和JavaScript创建动态圣诞树
  • 给查询业务添加redis缓存和缓存更新策略
  • Gin vs Beego: Golang的Web框架之争
  • Vue 路由传参和获取参数的方法
  • C++类模板再学习
  • 闭包通俗解释,Demo(Go Java Python)
  • winodos下使用VS2022编译eclipse-paho.mqtt.c并演示简单使用的 demo
  • pytest方法间变量值传递--request夹具
  • ajax有哪些优缺点?
  • Azure - 机器学习:使用 Apache Spark 进行交互式数据整理
  • MySQL篇---第五篇
  • SSM宾馆客房管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
  • 基于SSM和VUE的留守儿童信息管理系统
  • vue列表新增存储假数据
  • OpenCV学习(二)——OpenCV中绘图功能
  • 【孙哥说Spring5】第三章 Spring的事务处理
  • 图解Kafka高性能之谜(五)
  • 【计算机网络笔记】DNS报文格式
  • 日常软件游戏丢失msvcp120dll怎么修复?分享5个修复方法
  • Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块
  • 解决国外镜像无法访问导致的R包无法安装问题
  • HDU 1062:字符串反转