定义路由和处理函数
这是路由模块
//这是文章分类模块-的路由
//导入express模块
const express=require('express')
//创建路由对象
const Router=express.Router()
//导入处理函数的模块
const artcate_handler=require('../router_handler/artcate')
//挂载具体路由1
//获取文章分类列表数据的路由
Router.get('/cates',artcate_handler.getArticleCates)
//挂载具体路由2
//新增文章分类列表的数据的路由
Router.post('/addcates',artcate_handler.addArticleCates)
//向外导出路由
module.exports=Router//之前={对象 对象里面是属性 可以做一个省略}
路由处理函数模块:
// 新增文章分类列表数据的处理函数
exports.addArticleCates = (req, res) => {
res.send('ok')
}
验证表单数据——进行数据合法性的验证-(joi-规则-字符串类型-必填项-alphanum只包含字母和数字)--规则-
规则的对象
//表单数据验证的包
const joi=require('joi')
//定义验证规则——查看对应文档
//验证规则对象——新增文章分类
//新增文章分类的验证规则-
//名称必须是字符串、必填项
//别名必须是字符串、数字和字母的组成、必填项
const name = joi.string().required()
const alias=joi.string().alphanum().required()
module.exports.add_cate_schema ={//向外共享
body:{//校验req.body中的数据
name,
alias,
}
}
导入验证表单数据的中间件var expressJoi = require('@escook/express-joi')
//1、导入验证表单数据的中间件
var expressJoi = require('@escook/express-joi')
//2、导入需要验证的规则对象
const {add_cate_schema}=require('../schema/user')//存放是是规则_body里面的对象
//挂载具体路由2
//新增文章分类列表的数据的路由
Router.post('/addcates',expressJoi(add_cate_schema),artcate_handler.addArticleCates)
有提示说明name是必填项
//别名必须是字符串、数字和字母的组成、必填项
查询分类名称(name)与 分类别名(alias)是否被占用(SQL语句-都被占用-只占用其中的一个-查询数据--使用查询的长度进行判断-只要其中一个满足就是配占用-所以需要进行--退出)
创建数据表的时候有设置数据表中的name和alias具有唯一性,所以在插入相关数据的时候也需要对填入的数据是否与表中数据重复进行相关判断,提示不合法
路由处理函数
// 新增文章分类列表数据的处理函数
exports.addArticleCates = (req, res) => {
//定义查询分类列表的SQL语句
const sqlStr=`select * from ev_article_cate where name = ? or alias = ?`//根据id是从小到大的排序-升序
const newdata=req.body
db.query(sqlStr,[newdata.name,newdata.alias],(err,results)=>{//无需要参数
//执行SQL语句失败
if(err) return res.cc(err)
//执行SQL语句成
//这里存在先后关系
if (results.length === 2) //输入的名称和别名都存在在数据库中-且不相同
return res.cc('分类名称与别名被占用,请更换后重试!')
//只查到一条数据,且该数据的内容是是一条数据都被占用
if (results.length === 1 && results[0].name === newdata.name && results[0].alias === newdata.alias)
return res.cc('分类名称与别名被占用,请更换后重试!')
// 分类名称 或 分类别名 被占用
if (results.length === 1 && results[0].name === newdata.name)
return res.cc('分类名称被占用,请更换后重试!')
if (results.length === 1 && results[0].alias === newdata.alias)
return res.cc('分类别名被占用,请更换后重试!')
//分类名称和分类别名都可用,执行添加的操作
res.cc('可以去实现新增文章的分类')
})
}
实现新增文章分类的功能(插入数据-SQL语句-insert-传递对象-将对象的数据会添加到表里面)
// 新增文章分类列表数据的处理函数
exports.addArticleCates = (req, res) => {
//定义查询分类列表的SQL语句
const sqlStr=`select * from ev_article_cate where name = ? or alias = ?`//根据id是从小到大的排序-升序
const newdata=req.body
db.query(sqlStr,[newdata.name,newdata.alias],(err,results)=>{//无需要参数
//执行SQL语句失败
if(err) return res.cc(err)
//执行SQL语句成
//这里存在先后关系
if (results.length === 2) //输入的名称和别名都存在在数据库中-且不相同
return res.cc('分类名称与别名被占用,请更换后重试!')
//只查到一条数据,且该数据的内容是是一条数据都被占用
if (results.length === 1 && results[0].name === newdata.name && results[0].alias === newdata.alias)
return res.cc('分类名称与别名被占用,请更换后重试!')
// 分类名称 或 分类别名 被占用
if (results.length === 1 && results[0].name === newdata.name)
return res.cc('分类名称被占用,请更换后重试!')
if (results.length === 1 && results[0].alias === newdata.alias)
return res.cc('分类别名被占用,请更换后重试!')
//分类名称和分类别名都可用,执行添加的操作
const sqlStr1 = `insert into ev_article_cate set ?`
db.query(sqlStr1, newdata, (err, results) => {
// SQL 语句执行失败
if (err) return res.cc(err)
// SQL 语句执行成功,但是影响行数不等于 1
if (results.affectedRows !== 1) return res.cc('新增文章分类失败!')
// 新增文章分类成功
res.cc('新增文章分类成功!', 0)
})
})
}