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

数据库创建食品条目报错排查及预期数据格式修正需求

数据库条目创建错误排查与修复

存在的错误点

  • 异步操作未等待:Fooditems.create是异步方法,未加await会导致数据库操作还没完成就返回响应,可能引发数据不一致或未创建成功的问题。
  • 响应语法错误:res.status.json是错误写法,正确格式应为res.status(状态码).json(响应内容),该语法错误会直接导致500内部服务器错误。
  • 字段名不匹配:期望数据库字段是foodprice,但代码中用的是price,导致存储的字段名不符合预期。
  • 未捕获异常:异步代码没有错误捕获机制,一旦数据库操作出错,无法返回明确的错误信息。

原Postman响应

postman output

原数据库条目状态

mongodb database output

预期的数据库条目格式

{
    "foodName":"pulihora",
    "foodDescription":"pulihora with Lemon Rice",
    "foodImage":"https://google.com/puilhora",
    "foodprice":100
}

修复后的代码

router.post("/AddFooditem", ownerMiddleware, async (req, res) => {
  try {
    const { foodName, foodDescription, foodImage, price } = req.body;

    const foodItem = await Fooditems.findOne({ foodName });
    if (!foodItem) {
      // 字段名改为foodprice,匹配预期格式
      await Fooditems.create({
        foodName,
        foodDescription,
        foodImage,
        foodprice: price
      });
      res.status(200).send(`Food item is Created ${foodName}`);
    } else {
      // 正确设置状态码并返回JSON响应
      res.status(409).json({ msg: `${foodName} already exists` });
    }
  } catch (err) {
    // 捕获异常并返回错误信息
    res.status(500).json({ msg: "Error creating food item", error: err.message });
  }
});

修复说明

  1. 添加await到create方法:确保数据库操作完成后再返回响应,避免异步操作导致的数据问题。
  2. 修正响应语法:将错误的res.status.json改为res.status(409).json(...),409状态码用于表示资源冲突(条目已存在)。
  3. 调整字段名:把price改为foodprice,完全匹配你期望的数据库条目格式。
  4. 添加错误捕获:用try/catch包裹异步代码,捕获数据库操作或其他可能的错误,返回明确的错误信息便于后续排查。

内容的提问来源于stack exchange,提问作者Harsha Vardhan mashetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:58