请求协助实现Node.js与MongoDB的服务端分页(附现有代码)
Node.js + MongoDB 服务端分页实现方案
服务端分页核心是利用MongoDB的skip()和limit()方法,同时查询总数据量方便前端计算总页数。我们可以从请求参数中获取分页参数,同时优化原代码的冗余逻辑,实现如下:
function getServiceQualityAnex(req, res, next) { // 解析分页参数,设置默认值 const page = parseInt(req.query.page) || 1; const pageSize = parseInt(req.query.pageSize) || 10; const skipCount = (page - 1) * pageSize; // 复用查询条件,避免重复编写 const query = req.query.code ? { location: req.query.code } : {}; // 并行执行数据查询与总条数统计,提升效率 Promise.all([ ServiceQualityAnex.find(query) .sort({ _id: -1 }) .select('-hash') .skip(skipCount) .limit(pageSize), ServiceQualityAnex.countDocuments(query) ]) .then(([data, total]) => { res.json({ data, pagination: { page, pageSize, total, totalPages: Math.ceil(total / pageSize) } }); }) .catch(err => { res.sendStatus(500); // 用500标识服务端内部错误更准确 next(err); }); }
关键细节说明:
- 分页参数处理:从
req.query读取page和pageSize,转为数字并设置默认值,避免参数缺失引发异常。 - 查询条件复用:抽离统一的查询条件,确保数据列表和总条数统计的查询范围一致。
- 并行查询优化:通过
Promise.all同时执行列表查询和条数统计,比串行执行减少请求耗时。 - 返回结构优化:除数据列表外,返回分页核心信息(当前页、每页条数、总条数、总页数),方便前端快速实现分页交互。
- 错误状态修正:原代码所有错误返回404,实际应区分场景——404用于资源不存在,服务端内部错误用500更合理。
内容的提问来源于stack exchange,提问作者afnan
相关产品推荐
相关产品推荐

