使用mongoose-paginate执行搜索查询后如何获取全量数据

问题原因
当前代码无论请求是否携带stdID参数,都会固定给分页查询传递{stdID: req.query.stdID}的查询条件:当未传递stdID时,req.query.stdID为undefined,数据库会匹配所有stdID值为undefined的文档,这类文档不存在,因此返回空数组。
修复方案
动态构建查询条件对象,仅当stdID参数存在时才添加对应的过滤规则,无参数时查询对象为空,即可匹配全量数据。同时还修复了原代码的两个潜在问题:
parseInt(req.query.limit, 4)的进制参数错误,改为10进制解析避免limit值异常- 错误捕获分支补充了响应返回,避免请求长时间挂起
修改后代码如下:
router.get('/allStudents', async (req,res) => { const limit = parseInt(req.query.limit, 10) || 4; const page = parseInt(req.query.page, 10) || 1; const PAGE_SIZE = 10; const skip = (page - 1) * PAGE_SIZE; try { // 动态生成查询条件 const query = {} if (req.query.stdID) { query.stdID = req.query.stdID } const stdData = await Student.paginate(query, {limit, page, skip}) return res.status(200).json({ success: true, data: stdData }) } catch (err) { console.log(err); return res.status(500).json({ success: false, message: '查询学生数据失败' }) } });
内容的提问来源于stack exchange,提问作者Borgs
相关产品推荐
相关产品推荐

