Node.js商品更新接口兼容保留/更换图片场景的条件逻辑实现问题
问题原因
- 自定义的
getCondition函数没有返回值,拿到的result为undefined,导致最终newData中的images属性异常 - 条件判断逻辑不合理,且属性名对应错误:原有方案中旧图片的文件名存储在
req.body.imagesfilename,但你的判断逻辑里错误引用了req.body.imagesUrl - 未对
req.file做存在性校验,未上传新图片时req.file为undefined,直接读取path属性就会抛出你遇到的报错
正确实现方案
直接简化逻辑,不需要额外封装判断函数,优先判断是否存在新上传的文件,再对应赋值即可:
try { // 前置校验:避免前端既没传新图片也没传旧图片信息的非法请求 if (!req.file?.path && !req.body.images) { return res.status(400).send("缺少图片参数"); } // 构造基础更新字段 let dataBody = { categoria: req.body.categoria, subCategoria: req.body.subCategoria, title: req.body.title, price: req.body.price, description: req.body.description, images: {} } // 动态判断图片来源:优先用新上传的图片,没有就用原有图片信息 if (req.file && req.file.path) { dataBody.images.url = req.file.path; dataBody.images.filename = req.file.filename; } else { dataBody.images.url = req.body.images; dataBody.images.filename = req.body.imagesfilename; } // 执行更新 const producto = await Producto.findByIdAndUpdate( req.params.id, { $set: dataBody }, { new: true } ); console.log(producto); res.json({ producto }); } catch (error) { console.log(error); res.status(500).send("Hubo un Error"); }
上述代码可以同时兼容两种场景:上传新图片时用新文件信息,没上传时用前端提交的原有图片信息。
内容的提问来源于stack exchange,提问作者ddaudiosolutions
相关产品推荐
相关产品推荐

