目录
前言
新建表
获取文章分类列表接口
初始化路由模块
将路由对象导出并使用
初始化路由对象处理函数
修改路由代码
导入数据库
定义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')
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
数据库中的数据
当类名重复时
别名重复时
没有重复时
数据库中数据被更新