文章分类管理接口

目录

前言

新建表

获取文章分类列表接口

初始化路由模块

将路由对象导出并使用

初始化路由对象处理函数

修改路由代码

导入数据库

定义sql语句

调用db.query()

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

新增文章分类接口

定义路由和处理函数

验证表单数据

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

实现新增文章分类的功能

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

根据id删除文章分类接口

定义路由和处理函数

验证表单数据

实现删除文章分类的功能

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

定义路由和处理函数

验证表单数据

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

实现更新文章分类的功能


前言

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

新建表

文章分类管理接口_第1张图片

获取文章分类列表接口

初始化路由模块
// 创建路由对象
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模拟发送请求

文章分类管理接口_第2张图片

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

postman验证

文章分类管理接口_第3张图片

导入数据库
// 导入数据库操作模块
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模拟发起请求

数据库中的信息

文章分类管理接口_第4张图片

返回的数据

文章分类管理接口_第5张图片

新增文章分类接口

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

处理函数

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

postman验证接口

文章分类管理接口_第6张图片

验证表单数据

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

// 导入定义验证规则的模块
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验证

数据库中

文章分类管理接口_第7张图片

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

文章分类管理接口_第8张图片

类名相同时

文章分类管理接口_第9张图片

别名相同时

文章分类管理接口_第10张图片

没有重复时

文章分类管理接口_第11张图片

实现新增文章分类的功能

定义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验证是否新增成功

文章分类管理接口_第12张图片

在mysql数据库中

文章分类管理接口_第13张图片

成功插入

根据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参数

文章分类管理接口_第14张图片

验证表单数据

在规则定义模块中,定义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验证

原数据库中

文章分类管理接口_第15张图片

发送删除请求后

文章分类管理接口_第16张图片

在数据库中

文章分类管理接口_第17张图片

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

定义路由和处理函数

处理函数

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

定义路由

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

postman验证

文章分类管理接口_第18张图片

验证表单数据

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

 // 校验规则对象 - 更新分类
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

数据库中的数据

文章分类管理接口_第19张图片

当类名重复时

文章分类管理接口_第20张图片

别名重复时

文章分类管理接口_第21张图片

没有重复时

文章分类管理接口_第22张图片

数据库中数据被更新

文章分类管理接口_第23张图片

你可能感兴趣的:(Node,前端,数据库,node.js)