文章分类管理接口

目录

前言

新建表

获取文章分类列表接口

初始化路由模块

将路由对象导出并使用

初始化路由对象处理函数

修改路由代码

导入数据库

定义sql语句

调用db.query()

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

新增文章分类接口

定义路由和处理函数

验证表单数据

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

实现新增文章分类的功能

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

根据id删除文章分类接口

定义路由和处理函数

验证表单数据

实现删除文章分类的功能

[根据 Id 更新文章分类数据接口](#根据 Id 更新文章分类数据接口)

定义路由和处理函数

验证表单数据

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

实现更新文章分类的功能


前言

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

新建表

获取文章分类列表接口

初始化路由模块
javascript 复制代码
// 创建路由对象
const express = require('express')
const router = express.Router()

router.get('/cates',(req,res)=>{
    res.send('获取分类成功')
})

// 向外导出路由对象
module.exports=router
将路由对象导出并使用

在服务器中

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

使用postman模拟发送请求

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

postman验证

导入数据库
javascript 复制代码
// 导入数据库操作模块
const db = require('../db/index')
定义sql语句
javascript 复制代码
const sql = 'select * from ev_article_cate where is_delete=0 order by id asc'
调用db.query()
javascript 复制代码
db.query(sql,(err,results)=>{
        // 验证sql语句是否执行
        if(err) return res.send({status:1,message:err.message})
        res.send({
            status:0,
            message:'获取文章列表成功',
            data:results
    })
    })
完整的获取文章分类列表处理函数
javascript 复制代码
// 向外导出获取文章列表处理函数
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模拟发起请求

数据库中的信息

返回的数据

新增文章分类接口

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

处理函数

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

postman验证接口

验证表单数据

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

javascript 复制代码
// 导入定义验证规则的模块
const joi = require('@hapi/joi')

// 定义 分类名称 和 分类别名 的校验规则
const name = joi.string().required()
const alias = joi.string().alphanum().required()

// 校验规则对象 - 添加分类
exports.add_cate_schema = {
  body: {
    name,
    alias,
  },
}

对数据进行验证

javascript 复制代码
// 导入验证数据的中间件
const expressJoi = require('@escook/express-joi')
// 导入文章分类的验证模块
const { add_cate_schema } = require('../schema/artcate')

// 新增文章分类的路由
router.post('/addcates', expressJoi(add_cate_schema), artcate_handler.addArticleCates)
查询分类名称与别名是否被占用

定义sql语句

javascript 复制代码
 const sql = 'select * from ev_article_cate where name=? or alias=?'

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

javascript 复制代码
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语句

javascript 复制代码
const sql = 'insert ev_article_cate set ?'

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

javascript 复制代码
 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:'新增成功'})
        })
新增文章分类完整处理函数
javascript 复制代码
// 向外导出新增文章列表处理函数
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删除文章分类接口

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

处理函数

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

修改路由

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

使用postman验证

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

验证表单数据

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

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

向外共享校验对象

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

javascript 复制代码
exports.delete_cate_schema = {
    params: {
      id,
    },
  }

导入需要验证的对象

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

路由中验证

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

定义sql语句

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

javascript 复制代码
const sql = 'update ev_article_cate set is_delete=1 where id=?'

调用db.query()

javascript 复制代码
 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删除文章分类处理函数

javascript 复制代码
// 向外导出根据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 更新文章分类数据接口

定义路由和处理函数

处理函数

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

定义路由

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

postman验证

验证表单数据

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

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

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

javascript 复制代码
// 导入更新文章分类的验证规则对象
const { update_cate_schema } = require('../schema/artcate')

// 根据id更新文章分类数据
router.post('/updateCate',expressJoi(update_cate_schema),artcate_handler.updateArticleCates)
查询分类名称与别名是否被占用

定义sql语句

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

javascript 复制代码
const sql = 'select * from ev_article_cate where id<>? and (name=? or alias=?)'

调用db.query()

javascript 复制代码
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语句

javascript 复制代码
const sql = `update ev_article_cate set ? where Id=?`

调用db.query()

javascript 复制代码
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更新文章分类数据的处理函数

javascript 复制代码
// 向外导出根据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

数据库中的数据

当类名重复时

别名重复时

没有重复时

数据库中数据被更新

相关推荐
小政爱学习!19 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
魏大帅。25 分钟前
Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析
前端·javascript·ajax
花花鱼31 分钟前
vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法
前端·javascript·elementui
k093335 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
EricWang13581 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
September_ning1 小时前
React.lazy() 懒加载
前端·react.js·前端框架
时差9531 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
web行路人1 小时前
React中类组件和函数组件的理解和区别
前端·javascript·react.js·前端框架
超雄代码狂1 小时前
ajax关于axios库的运用小案例
前端·javascript·ajax