用node做个后端API前端开发那些事儿

封装 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

上一篇下一篇

猜你喜欢

热点阅读