0
点赞
收藏
分享

微信扫一扫

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

接上。。。

修改语句

这里的修改,特指通过主键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

举报

相关推荐

0 条评论