封装 MySQL(四)封装 delete—— deleteMod
2021-08-11 本文已影响0人
自然框架
接上。。。
删除语句
从需求来说,删除分为物理删除和逻辑删除,这里的删除指通过主键ID,物理删除记录
DELETE FROM tableName WHERE id=?
这个简单粗暴的就给删除了,没有做各种检查,验证的事情以后再说。
我们先依据 meta 和 model 来拼接删除用的SQL。
实现代码
只需要表名和主键字段即可。
/**
* 实现删除数据的功能。拼接 DELETE FROM 的 SQL语句
* @param { MySQLHelp } help 访问数据库的实例
* @param { Object } info 表、字段
* @param { number|string } id 数据
* @returns 影响的记录数
* * info 结构:
* * * tableName: '', 表名
* * * idKey '', 主键名称
* * id :number | string
*/
function deleteData(help, info, id, cn = null) {
// 拼接 删除 用的SQL语句,
const myPromise = new Promise((resolve, reject) => {
const sql = `DELETE FROM ${info.tableName} WHERE ${info.idKey} = ? `
const _cn = cn === null ? help.db : cn
help.query(sql, [id], _cn)
.then((res) => {
// 删除成功,返回影响行数
resolve(res.affectedRows)
})
.catch((res) => {
// 出错了
reject(res)
})
})
return myPromise
}
module.exports = deleteData
还是比较简单的。
使用方式(实现服务)
// 引入help
const { deleteModel } = require('../../packages/mysql.js')
console.log('\n★ update 文件被加载\n')
/**
* 实现删除服务
* @param {object} userInfo 当前登录人的信息
* @param {object} help 访问数据库的实例
* @param {objec} serviceInfo 服务的 meta
* @param {object} model 占位用
* @param {number|string} id 记录ID
* @returns 返回影响的行数
*/
const del = (userInfo, help, serviceInfo, model, id) => {
return new Promise((resolve, reject) => {
// 加载meta
modelName = serviceInfo.model
const info = require(`../../public/model/${modelName}.json`)
console.log('\n启动 delete 服务\n')
deleteModel(help, info, id).then((count) => {
console.log('删除数据,影响行数:', count)
resolve({ count })
}).catch((err) => {
reject('删除数据出错!')
})
})
}
module.exports = del
根据服务ID,加载需要的meta,然后加上前端传递来的ID,就可以召唤神龙,哦不,是调用删除函数了。
逻辑删除
逻辑删除,一般是做一个标记性的字段,比如isDel,然后修改这个字段的值,这样可以实现逻辑删除,这样做的好处就是便于找回记录。
实现方式就由 delete 变成了 update。
可以使用 update 的方法,也可以单独封装一个函数。
最外面还有一个路由,负责做服务分发。
未完待续。。。
源码:
https://gitee.com/naturefw/node-services
https://gitee.com/naturefw/node-services/tree/master/packages