如何对比请求体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
相关产品推荐
相关产品推荐

