You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Skip参数报错:默认返回负值触发MongoServerError求助

解决MongoServerError: Skip value must be non-negative错误

错误信息

MongoServerError: Skip value must be non-negative, but received: -9223372036854775808

问题根源

你的listBySearch控制器方法中,skip参数未设置默认值:

let skip = parseInt(req.body.skip);

当请求未携带skip参数时,req.body.skip为undefined,parseInt(undefined)返回NaN。MongoDB处理skip(NaN)时会将其解析为-9223372036854775808,触发非负校验错误。

修复方案

给skip设置默认值为0,同时增加校验确保其为非负数:

修改后的完整代码

exports.listBySearch = (req, res) => {
    let order = req.body.order ? req.body.order : "desc";
    let sortBy = req.body.sortBy ? req.body.sortBy : "_id";
    let limit = req.body.limit ? parseInt(req.body.limit) : 100;
    // 修复skip参数:设置默认值0,同时确保非负
    let skip = parseInt(req.body.skip) || 0;
    skip = skip < 0 ? 0 : skip;
    let findArgs = {};

    for (let key in req.body.filters) {
        if (req.body.filters[key].length > 0) {
            if (key === "price") {
                findArgs[key] = {
                    $gte: req.body.filters[key][0],
                    $lte: req.body.filters[key][1]
                };
            } else {
                findArgs[key] = req.body.filters[key];
            }
        }
    }

    Product.find(findArgs)
        .select("-photo")
        .populate("category")
        .sort([[sortBy, order]])
        .skip(skip)
        .limit(limit)
        .exec((err, data) => {
            if (err) {
                console.log(err);
                return res.status(400).json({
                    error: "Products not found"
                });
            }
            res.json({
                size: data.length,
                data
            });
        });
};

关键修改说明

  1. parseInt(req.body.skip) || 0:当req.body.skip不存在或解析后为NaN时,默认使用0
  2. skip = skip < 0 ? 0 : skip:额外校验,防止客户端传入负数skip值导致相同错误

修改后,无论请求是否携带skip参数、或传入非法值,都能保证skip为非负整数,符合MongoDB的要求。

内容的提问来源于stack exchange,提问作者hacksrinja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:54:24