page = max(int(request.args.get('page', 1)), 1)
offset = (page - 1) * size
# 返回
{'page': page, 'size': size, 'total': total}

前端传 page=1 想拿第一页,后端按从 0 开始算,结果第一页数据被跳过。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,两端对页码起始值理解不同,接口文档没有明确约定。

围绕「接口分页起始值」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:统一从 1 开始并在文档注明;服务端做参数校验;前端封装统一的分页请求方法。

改完只确认一件事:第一页包含最新数据,总页数与总数计算正确。

作者 9823189