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

基于Node.js+Express的REST API实现MongoDB价格筛选功能报错求助

问题排查与修复方案

错误原因

  • 误用Mongoose的find方法:Mongoose的find方法不支持传入JavaScript数组过滤式的回调函数作为参数,传入回调会导致Mongoose查询参数解析异常,触发Query was already executed报错;同时回调执行时会拿到空/Null文档,触发读取price属性的类型错误。
  • 空值判断逻辑错误:Phone.find返回值为匹配结果的数组,无匹配数据时返回空数组,永远不会为null,原有!phone的判断逻辑完全不生效。
  • 缺少必要的异常拦截:没有校验传入的price参数是否为合法数字,且发送404响应后没有终止代码执行,会触发重复发送响应的报错。

提示:请确保你的Phone模型中price字段定义为Number类型,避免字符串与数字匹配失败的问题。

修复后代码

router.get("/:price", async (req, res) => {
    try {
        // 校验参数合法性
        const targetPrice = parseInt(req.params.price);
        if (isNaN(targetPrice)) {
            return res.status(400).send('请传入合法的价格数字');
        }
        // 传入Mongoose标准查询对象格式
        const phones = await Phone.find({ price: targetPrice });
        // 修正空结果判断逻辑
        if (phones.length === 0) {
            return res.status(404).send('未找到对应价格的手机数据');
        }
        res.send(phones);
    } catch (e) {
        res.status(500).send('Error ' + e);
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:04