07-博客api接口项目实战之获取用户列表

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

实现用户列表获取功能

接口所需字段:fuzzy 查询字符串 pageNum 页码 pageSize 每页显示条数

查询字符串查的是username用户名和nickname昵称,允许为空

页码默认为1,不允许传空,非必填

每页条数默认为10,不允许传空,非必填

实现步骤
1. 创建字段校验对象
// schema/user.js
// 获取用户列表
const getUser = {
  query: {
    fuzzy: joi.string().allow(''),
    pageNum: joi.number().integer().min(1).disallow(''),
    pageSize: joi.number().integer().min(1).disallow(''),
    sortKey: joi.string().disallow(''),
    sortValue: joi.string().disallow('')
  }
}
module.exports = {
  reg_login,
  updatePwd,
  updateInfo,
  getUser
}
2. 封装自定义sql执行函数
// utils/db.js
/**
* 通过sql语句查询
* @param {String} sql sql语句
**/
const selectDataBySql = function (sql) {
  return new Promise((resolve, reject) => {
    db.query(sql, (err, res) => {
      if (err) {
        resolve({status: 1, msg: 'sql语句查询失败', data: null, err})
      } else {
        resolve({status: 0, msg: 'sql语句查询成功', data: res, err: null})
      }
    })
  })
}
module.exports = {
  addData,
  updateData,
  selectData,
  selectDataBySql // 向外共享sql语句查询函数
}
3. 创建路由
// router/userInfo.js
const { updatePwd, updateInfo, getUserList } = require('../router_handler/userinfo')
// 获取用户列表
router.get('/getUserListPage', validateJoi(userSchema.getUser), getUserList)
4. 创建路由处理函数
  • 如果传了pageNum 就用 pageNum 否则默认1
  • 如果传了pageSize 就用pageSize 否则默认10
  • fuzzy 不传或空 查询所有用户列表,传了查询username或者nickname为fuzzy的用户列表
  • sortKey排序字段,不传不排序
  • sortValue排序规则,升序还是降序
// router_handler/userInfo.js
// 获取用户列表
const getUserList = async (req, res) => {
  let {fuzzy, pageNum, pageSize, sortKey, sortValue} = req.query
  if (!pageNum) pageNum = 1
  if (!pageSize) pageSize = 10
  let totalSql = `select count(*) AS total from users` // 查询所有数据总条数
  let selectSql = `select user_id,username,nickname,user_pic,is_admin,is_use,reg_time from users` // 查询表数据
  let total = 0 // 总条数
  if (fuzzy) {
    // 查询用户名或昵称为fuzzy的用户列表
    totalSql += ` where username like '%${fuzzy}%' or nickname like '%${fuzzy}%'`
    selectSql += ` where username like '%${fuzzy}%' or nickname like '%${fuzzy}%'`
  }
  // 添加分页和排序 根据注册时间 添加limit分页
  if (sortKey && sortValue) selectSql += ` order by ${sortKey} ${sortValue} limit ${(pageNum - 1) * pageSize},${pageSize}`
  selectSql += ` limit ${(pageNum - 1) * pageSize},${pageSize}` // 不排序
  // 执行sql语句
  const totalRes = await db.selectDataBySql(totalSql)
  if (totalRes.status !== 0) return res.cc(totalRes.err)
  total = totalRes.data[0].total // 总条数
  const sqlectRes = await db.selectDataBySql(selectSql)
  if (sqlectRes.status !== 0) return res.cc(sqlectRes.err)
  const userList = sqlectRes.data
  res.send({
    status: 0,
    msg: '获取用户列表成功!',
    total,
    data: userList
  })
}
module.exports = {
  updatePwd,
  updateInfo,
  getUserList
}
5. 测试接口:http://127.0.0.1:8086/my/getUserListPage
  • 请求路径:/my/updateInfo
  • 请求方法:get
  • 请求头:Authorization: 登录token
  • 请求参数:
请求参数参数类型参数说明备注
fuzzyString查询字符串非必填 允许为空
pageNumNumber页码非必填 非空 默认 1
pageSizeNumber每页显示条数非必填 非空 默认 10
sortKeyString排序字段非必填 非空
sortValueString排序值非必填 非空 (desc 降序、asc升序)
0
选择打赏方式:
微信

评论 (0)

取消