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

封装 MySQL(三)封装 update——updateMode

2021-08-09  本文已影响0人  自然框架

接上。。。

修改语句

这里的修改,特指通过主键ID,修改记录(model),其他修改方式再封装其他函数。

UPDATE aaa set aaacol = ? WHERE id=?

这个比较简单,只是多了一个主键字段,我们还是依据 meta 和 model 来拼接SQL。

 
/**
 * 实现添加数据的功能。拼接 UPDATE 的 SQL语句
 * @param { MySQLHelp } help 访问数据库的实例
 * @param { Object } info 表、字段
 * @param { Object } values 数据
 * @param { number|string } id 数据
 * @returns 影响的记录数
 * * info 结构:
 * * * tableName: '', 表名
 * * * id '', 主键名称
 * * * cols:{colName: '类型'}, josn 字段需要标记 
 * * values 结构:
 * * * colName: value 
 * * id 结构:number string
 */
function updateData(help, info, values, id, cn = null) {
  // 拼接 修改 用的SQL语句,
  const myPromise = new Promise((resolve, reject) => {
    // sql = 'UPDATE aaa set aaacol = ? WHERE id=?'
    // 获取字段名称和值的数组
    const { colNames, params } = help.createTableCols(info, values)
    const sql = `UPDATE ${info.tableName} SET ${colNames.join(',')} WHERE ${info.idKey} = ? `
    params.push(id)

    const _cn = cn === null ? help.db : cn

    help.query(sql, params,_cn)
      .then((res) => {
        // 修改成功,返回影响行数
        resolve(res.affectedRows)
      })
      .catch((res) => {
        // 出错了
        reject(res)
      })
    })
  return myPromise
}
module.exports = updateData

使用方式,做个服务层

// 引入help
const { updateModel } = require('../../packages/mysql.js')

console.log('\n★ update 文件被加载\n')

/**
 * 实现修改服务
 * @param {object} userInfo 当前登录人的信息
 * @param {object} help 访问数据库的实例
 * @param {objec} serviceInfo 服务的 meta
 * @param {object} model 前端提交的 body
 * @param {number|string} id 记录ID
 * @returns 返回新添加的记录的ID
 */
const update = (userInfo, help, serviceInfo, model, id) => {
  return new Promise((resolve, reject) => {
    // 加载meta
    modelName = serviceInfo.model
    const info = require(`../../public/model/${modelName}.json`)

    console.log('\n启动 update 服务\n')
    updateModel(help, info, model, id).then((count) => {
      console.log('外部修改数据,影响行数:', count)
      resolve({ count })
    }).catch((err) => {
      reject('修改数据出错!')
    })

  })
}

module.exports = update

每一个小功能都做成了独立的 js 文件。
其实一开始想做一个大的class,后来觉得代码太长不好维护,于是想做成子类的形式,但是想想似乎没啥必要,除了少传递一个help参数之外好像没啥区别。
所以最后决定采用这种方式。

看起来似乎有点雷同,因为这里其实是分了两个层,一个是数据层,实现基础的SQL语句的拼接,有一点点ORM的意思。

一个是服务层,接收前端传递的数据,然后调用数据层实现功能。

最外面还有一个路由,负责做服务分发。

未完待续。。。

源码:

https://gitee.com/naturefw/node-services

https://gitee.com/naturefw/node-services/tree/master/packages

上一篇下一篇

猜你喜欢

热点阅读