文章分类管理接口

目录

前言

新建表

获取文章分类列表接口

初始化路由模块

将路由对象导出并使用

初始化路由对象处理函数

修改路由代码

导入数据库

定义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

数据库中的数据

当类名重复时

别名重复时

没有重复时

数据库中数据被更新

  • 30
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
软件简介:     人的一生会涉及到很多领域,学到很多知识和技能,学则思,思而理。学习要懂得思考,思考后要懂得整理、消化所学知识,达到触类旁通的效果。21世纪互联网的兴起,可以让我们很容易的获取各类资料,不同的领域会参考不同的网站、不同的文章,学得越多,资料越多,所以有必要分门别类加以管理。     多分类、多子类帮助您管理不同领域的文章、学习笔记;每个分类/子类对应各自不同的网站链接,方便查阅资料或发表相关文章;全文检索功能可以快速查询您之前录入过的数据,免去一个个文件打开然后查找数据的麻烦,如果录入的资料未找到信息也可以让其搜寻网络;导入/导出功能可以使志同道合之人很方便的实现数据共享...... ===============更新日志============== 2012.05.21    【v3.3.6.5】 01、文章页面布局调整,添加常用工具接口 02、软件设置页面添加"文字背景色调"选项卡 03、检测软件是否存放在为C盘,提醒用户转移数据 04、<韵脚大全>添加“词组联想”功能 05、<韵脚大全>"成语联想"修正不能即时搜索问题 06、<韵脚大全>添加“友情链接”模块 07、<韵脚大全>完善“同韵四声”查询时的效果 08、软件设置页面添加告别感悟,修改北漂示意图 2012.02.22    【v3.1.6.2】 01、导入/导出支持更多格式 02、文章搜索栏目新增“翻译”选项卡 03、所有子窗体字体放大,区分不同版面的用色 04、软件设置页面添加“恢复软件默认设置”选项卡 05、<韵脚大全>页面支持窗体最大化和自定义大小 06、<韵脚大全>页面添加自定义字体大小、颜色选项 07、<韵脚大全>添加右侧快捷按钮板块 2012.02.05    【v3.0.6.0】 01、支持自适应窗体大小以及最大化功能 02、文章标题框自由拉伸并有记忆功能 03、兼容更多文本格式<ansi、unicode编码> 04、文章搜索布局修改成“搜索引擎”样式 05、添加“字体大小”、“文字颜色”的选项卡 06、页面布局调整为“右侧工具栏”,自动感应缩放 07、更换托盘程序代码,添加右键操作菜单 08、关于作者页面添加:头像设置、暧昧短信栏目 09、新增网友诗集并更新部分网友留言 10、修复输入法设置一个小BUG 11、<韵脚大全>页面添加“自行输入韵母”查询功能 2011.10.15    【v2.9】 01、完善托盘代码,修复自动取消/自动切换动作 02、添加批量操作时防卡死功能代码 03、统一所有子窗体输入法设置 04、修改软件回访编码、Image目录图片整理归类 05、广告页面代码整合,添加“天朝乞丐”顺口溜 06、软件关闭时自动修改首页面供下次启动时调用 07、广告、扩展、关于子窗体弹出时不取消主表操作 2011.09.17    【v2.8】 01、更换并优化输入法读取代码,支持Win7系统 02、应网友要求多处文本框字体增大1~2号 03、双击文本内容处边框变化,按Esc还原初始大小 04、添加软件托盘功能,放大操作修改为全屏操作 05、新增<广告>主菜单,增设游戏、赞助等栏目 06、添加代码让其在适当的时候弹出软件帮助页面 07、新增<成语词库联想>页面,进一步完善韵脚查询 2011.08.18    【v2.7】 01、软件开启前弹出 Hello 框,为后续软件统一品牌铺路 02、应网友要求添加可选软件启动时密码登陆功能 03、将非文字类管理页面移除,进一步精简代码 04、软件设置页面图片超级链接添加 Setup_ 参数 05、更换“资源共享”的下载链接,添加少许共享资源 06、修改删除文章快捷键为Ctrl Del,避免按保存时错位 2011.07.02    【v2.6】 01、调整程序后台打开统计页面的次数和间隔时间 02、关于作者、软件更新、友情链接变更访问官网ID 03、全文检索如搜索不到数据则提示是否搜寻网络 04、在分类数据/友情链接未更改的情况下不刷新文章 05、修正在没有记录时,输入一些数据后点删除会出错 06、添加软件记忆功能,开启后显示最后访问的类别 07、文章排序方式改为pr值排序,数值越大排名越靠前 2011.05.26    【v2.5】 01、修正文章页面左侧标题点空白处清除标题BUG 02、文本内容框右键菜单各功能位置调整 03、新增软件后台访问官网功能,以此了解软件使用量 04、<韵脚大全>字库调整窗体底部增加操作提示信息 05、<韵脚大全>菜单“扩展”处新增“字库调整”方便调用 06、<韵脚大全>更新不覆盖韵母数据,界面数据转移 2011.04.07    【v2.4】 01、应网友要求<韵脚大全>添加“同韵四声"查询功能 02、诗词歌赋处添加网友"王茂"21首韵脚诗供大家鉴赏 03、添加<韵脚大全>底部的条件查询信息提示 04、双击韵脚窗口弹出“字库调整”,可自行调整字库 2011.03.18    【v2.3】 01、操作提示信息窗弹出2秒后将自动关闭 02、主窗体控件统一下移9位,使整体布局更显紧凑 03、窗体<资源共享>平台完善各项快捷操作 04、窗体<软件设置>添加总在最前选项 05、窗体<友情链接>添加新浪等文档共享网络地址 06、新增<常用工具>一期,二期可自由添加快捷图标 07、文章数据保存之前判断文件名输入是否规范 08、修正文章内容修改后无法保存以及剪切问题 2011.02.19    【v2.2】 01、软件启动判断是否有草稿/用户设置文件 02、完善<韵脚大全>右键操作/添加数篇相关资料 03、文章放大操作后tab功能键支持/保存后更新日期 04、搜索内容保存到配置文件/完善文件拖放防出错功能 05、窗口页面关闭后才刷新分类与链接,其他窗体忽略 06、添加全局输入法调整/文章标题触碰后变宽设置 07、提供资源共享平台,方便用户自由上传/下载数据 2011.01.26    【v2.1】 01、鼠标触碰左侧“文章标题框"后展开的幅度适当缩小 02、网友留言去除留言状态显示 03、执行文章搜索后立即同步显示相应分类/子类名称 04、修正删除分类后子类链接不能完全转移到回收站 05、修正友情链接管理双击回收站链接访问地址错误 06、将用户设置单独存放到UserSetup配置文件以便保存 07、修正子类为空时搜索/查询数据出错 08、集成诗词写作工具<韵脚大全> 2011.01.18    【v2.0】 01、代码重写实现窗体重用、提供后期扩展性支持 02、添加菜单选项以及高级设置 03、文章标题鼠标放置后变宽(应网友要求) 04、强化文章导入导出功能(导出目录的优化) 05、完善友情链接管理(新增回收站链接管理) 2010.10.31    【v1.8】 01、SQL代码瘦身,不必要的字段不予显示 02、精确子类、文章定位操作 03、导入数据读取目录优化 04、修正放大操作判断键盘有动作后才提示是否保存 05、修正放大操作后文章无法切换是否自动换行 06、去除菜单自动设定的快捷设置 07、丰富菜单选项以及完善快捷操作 08、分类窗口代码中汉字全替换 2010.10.21    【v1.0】 01、自定义多分类、多子类文章类别 02、相应的类别对应各自的友情链接 03、放大操作提供全选、查找、替换、字体更换等功能 04、文章置顶、书签记忆功能查询 05、批量转移分类、子类文章 06、批量修改文章出处、文章作者 07、批量导入/导出文章,支持版权信息输出 08、提供默认输入法设置、软件皮肤更换功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软工不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值