实现用户列表获取功能
接口所需字段: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
- 请求参数:
请求参数 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
fuzzy | String | 查询字符串 | 非必填 允许为空 |
pageNum | Number | 页码 | 非必填 非空 默认 1 |
pageSize | Number | 每页显示条数 | 非必填 非空 默认 10 |
sortKey | String | 排序字段 | 非必填 非空 |
sortValue | String | 排序值 | 非必填 非空 (desc 降序、asc升序) |
评论 (0)