【node.js后台api项目】(十二)根据id更新文章分类数据
1、接口相关信息
- 路由:
/my/article/updatecate
- method: post
- 请求头需要携带
Authorization
字段进行身份认证 - 请求体
- id: 分类的Id
- name:分类的名称
- alias:分类的别名
2、 定义路由和处理函数
- 在
/router/artcate.js
模块中,新增 更新用户基本信息 的路由:
// 根据id更新文章分类 路由
router.post('/updatecate' , artcate_handler.updateCateById)
- 在
./router_handler/artcate.js
中定义路由处理函数并向外导出
// 根据Id更新文章分类 路由处理函数
const updateCateById = (req, res) => {
res.send('updatecate...')
}
// 向外导出路由处理函数
module.exports = {
getArticleCates,
addArticleCates,
deleteCateById,
getArtcateById,
updateCateById
}
测试测试
3、验证提交的数据
- 在
/schema/artcate.js
模块中,定义 id,name,alias 的验证规则,由于id,name,alias规则多次用到,修改该模块代码如下
// 导入joi
const Joi = require('joi')
const name = Joi.string().required()
const alias = Joi.string().alphanum().required()
const id = Joi.number().integer().min(1).required()
// 定义 分类名称 和 分类别名 的校验规则
const add_cate_schema = {
body: {
name,
alias
}
}
// 定义 分类Id 的校验规则
const delete_cate_schema = {
params: {
id
}
}
// 定义 分类Id校验规则
const get_cate_schema = delete_cate_schema
// 定义更新分类 name , alias
const update_cate_schema = {
body: {
Id: id,
name,
alias
}
}
module.exports = {
add_cate_schema,
delete_cate_schema,
get_cate_schema,
update_cate_schema
}
- 在
/router/artcate.js
模块中,导入需要的验证规则对象,并在路由中使用:
// 导入文章分类校验规则模块
const { add_cate_schema, delete_cate_schema, get_cate_schema, update_cate_schema } = require('../schema/artcate')
// 根据id更新文章分类 路由
router.post('/updatecate', joiExpress(update_cate_schema), artcate_handler.updateCateById)
4、查询分类名称和别名是否被占用
- 定义查重的 SQL 语句:
// 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
const sql = `select * from ${table.article_cate_Table} where Id<>? and (name=? or alias=?)`
- 调用 db.query() 执行 查重操作:
// 执行查重操作
db.query(sql, [req.params.Id, req.params.name, req.params.alias], (err, results) => {
if (err) return res.cc(err)
if (results.length === 2) return res.cc('分类名称和别名被占用,请更换后重试!')
if (results.length === 1 && req.params.name === results[0].name && req.params.alias === results[0].alias) return res.cc('分类名称和别名被占用,请更换后重试!')
if (results.length === 1 && req.params.name === results[0].name) return res.cc('分类名称被占用,请更换后重试!')
if (results.length === 1 && req.params.alias === results[0].alias) return res.cc('分类别名被占用,请更换后重试!')
// TODO:更新分类名称别名
})
5、实现更新文章分类的功能
- 定义更新文章分类的 SQL 语句:
const sql = `update ${table.article_cate_Table} set ? where id=?`
- 执行更新文章分类的sql语句
// 执行sql语句
db.query(sql, [req.body, req.body.Id], (err, results) => {
if (err) return res.cc(err)
if (results.affectedRows !== 1) return res.cc('更新文章分类失败!')
return res.cc('更新文章分类成功~', 0)
})