使用promise封装数据库操作方法
在utils文件夹中创建db.js
1. 根据字段查询数据
// db.js
/**
* 根据某个字段查询数据
* @param {String} storeName 表名
* @param {String} key 字段
* @param {String} value 字段值
**/
const selectData = function (storeName, key, value) {
return new Promise((resolve, reject) => {
const sql = `select * from ${storeName} where ${key} = ${value}`
console.log(sql);
db.query(sql, (err, res) => {
if (err) {
resolve({status: 1, msg: '查询失败', data: null, err})
} else {
resolve({status: 0, msg: '查询成功', data: res, err: null})
}
})
})
}
2. 根据字段更新数据
// db.js
/**
* 根据某个字段更新数据
* @param {String} storeName 表名
* @param {Object} data 要更新的数据
* @param {String} key 字段
* @param {String} value 字段值
**/
const updateData = function (storeName, data, key, value) {
return new Promise((resolve, reject) => {
const sql = `update ${storeName} set ? where ${key} = ${value}`
db.query(sql, data, (err, res) => {
if (err) {
resolve({status: 1, msg: '更新数据失败', data: null, err})
} else {
resolve({status: 0, msg: '更新数据成功', data: res, err: null})
}
})
})
}
3. 给某个表中添加数据
// db.js
/**
* 添加数据
* @param {String} storeName 表名
* @param {Object} data 要插入的数据
* @param
**/
const addData = function (storeName, data) {
return new Promise((resolve, reject) => {
const sql = `insert into ${storeName} set ?`
db.query(sql, data, (err, res) => {
if (err) {
resolve({status: 1, msg: '插入数据失败', data: null, err})
} else {
resolve({status: 0, msg: '插入数据成功', data: res, err: null})
}
})
})
}
我在这里都用的是resolve,你也可以用reject,reject抛出,需要使用.catch捕获
使用实例:修改用户基本信息处理函数 router_handler/userInfo.js
// 更新用户基本资料
const updateInfo = async (req, res) => {
const user_id = req.query.user_id
const userInfo = req.body
if (JSON.stringify(userInfo) === '{}') return res.cc('请填写要修改的参数!')
// 查询
const selectData = await db.selectData('users', 'user_id', user_id)
if (selectData.status !== 0) return res.cc(selectData.err)
if (selectData.data.length !== 1) return res.cc('该用户不存在!')
// 更新
const updateData = await db.updateData('users', userInfo, 'user_id', user_id)
if (updateData.status !== 0) return res.cc(updateData.err)
const {data: result} = updateData
if (result.affectedRows !== 1) return res.cc('更新用户信息失败,请重试!')
res.send({
status: 0,
msg: '修改成功!'
})
}
其他路由处理函数,自己看着调整,后续就直接使用promise操作数据库,根据实际情况封装对应的数据库操作方法
评论 (0)