接上。。。
修改语句
这里的修改,特指通过主键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
网友评论