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

如何对比请求体idprod与MongoDB集合值?代码问题求助

问题分析与修复方案

核心问题点

  • 对象比较逻辑错误:prod4 !== product永远为true——两个对象即便内容完全一致,引用地址不同时直接用!==比较也不会相等。你需要对比的是请求体里的idprod值和数据库返回产品的对应字段值,而非整个对象。
  • 产品查询参数错误:ProductsService.getById(id)里的id是URL参数中的用户ID,不是请求体里的产品IDidprod,导致查询的产品完全不对。
  • 条件判断逻辑错误:用&&意味着只有“用户不存在且产品不存在”才触发错误提示,但实际需求是“用户不存在或产品不存在”就提示,应该用||;同时user === false判断不准确,要看UsersService.getById的返回规则,通常未找到用户会返回null或undefined,用!user更通用。
  • 拼写错误:Response.SUCCSESS应为Response.SUCCESS。

修复后的代码

createSale: async (req, res) => {
    try {
        const { params: { id: userId } } = req;
        const { body } = req;
        // 直接提取请求体中的产品ID,无需包装成对象
        const productId = req.body.idprod;
        
        let user = await UsersService.getById(userId);
        // 使用请求体里的产品ID查询对应产品,而非用户ID
        let product = await ProductsService.getById(productId);
        
        // 判断用户不存在 或者 产品不存在
        if (!user || !product) {
            Response.ERROR(res, 'No existe usuario o producto');
        } else {
            const insertedId = await SalesService.create(body);
            // 修正拼写错误
            Response.SUCCESS(res, 201, 'Venta Registrada', insertedId)
        }
    } catch (error) {
        debug(error);
        res.status(500).json({ message: `internal server error create sale in controller.js`});
    }
},

额外说明

  • 你已安装body-parser,只要配置正确(比如app.use(bodyParser.json())),req.body.idprod就能正常获取请求体字段,这部分无需担心。
  • 确认ProductsService.getById接收的参数是产品的idprod值,如果MongoDB中产品用的是默认_id字段,需要调整查询逻辑,比如改用ProductsService.findOne({ idprod: productId })。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:01