使用cursor.limit(req.query.limit)返回空数组的技术求助
问题原因及解决办法
核心问题
req.query.limit 是从URL获取的字符串类型,而MongoDB的limit()方法要求传入数值类型参数。直接传递字符串会导致MongoDB无法正确解析,最终返回空数组。
修复代码
将req.query.limit转换为数值类型后再传入limit(),同时处理参数未提供或无效的情况:
export const getHotels = async (req, res, next) => { const { min, max, limit, ...others } = req.query; try { // 将limit转换为数值,无效时设为undefined(不限制数量) const numericLimit = limit ? parseInt(limit, 10) : undefined; // 将min和max也转换为数值,避免位运算潜在问题 const numericMin = min ? parseInt(min, 10) : 1; const numericMax = max ? parseInt(max, 10) : 999; const hotels = await Hotel.find({ ...others, cheapestPrice: { $gt: numericMin, $lt: numericMax }, }).limit(numericLimit); res.status(200).json(hotels); } catch (err) { next(err); } };
额外说明
- 原代码中
min | 1使用了位运算,虽然能将字符串转为数字,但对于非整数或无效值的处理不够直观,改用parseInt()更清晰可靠。 - 转换时指定基数
10(即parseInt(limit,10)),避免出现八进制解析等意外情况。
内容的提问来源于stack exchange,提问作者أحمد السديري
相关产品推荐
相关产品推荐

