06-博客api接口项目实战之数据库方法封装

辰漪
2022-01-20 / 0 评论 / 34 阅读 / 正在检测是否收录...

使用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
选择打赏方式:
微信

评论 (0)

取消