目录
本文包含获取文章分类列表接口,新增文章分类接口,根据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')
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
- })
- })
- // 向外导出获取文章列表处理函数
- 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数据库中

成功插入
- 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更新文章分类处理函数
- 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
数据库中的数据

当类名重复时

别名重复时

没有重复时

数据库中数据被更新
