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

Mongoose如何解析FormData中JSON字符串格式的对象数组并存储

解决方法

你当前代码存在两个核心问题:

  1. 没有将前端传递的ingredients JSON字符串反序列化为对象数组
  2. 构造Recipe实例时错误地将数组整体赋值给了单个ingredient的name和amount字段,和Schema定义的结构不匹配

修改步骤

  • 第一步:使用JSON.parse()将接收到的ingredients字符串转换为符合要求的对象数组,建议添加异常捕获避免非法JSON格式导致服务崩溃
  • 第二步:直接将转换后的数组赋值给Recipe实例的ingredients字段即可,不需要手动构造对象结构

修改后的接口代码

const Recipe = require('../models/recipe.model');
const recipeCtrl={};
recipeCtrl.CreateRecipeServer =async(req, res, next)=>{
  if(!req.file) {
    return res.status(500).send({ message: 'Upload fail'});
  }
  try {
    // 解析前端传过来的ingredients JSON字符串
    const ingredients = JSON.parse(req.body.ingredients);
    const imageUrl = 'http://192.168.0.7:3000/images/' + req.file.filename;
    const recipe=new Recipe({
      name:req.body.name,
      description:req.body.description,
      imagePath:imageUrl,
      ingredients: ingredients // 直接赋值解析后的数组即可
    });
    await recipe.save();
    return res.status(200).send({message: '食谱创建成功', data: recipe});
  } catch (err) {
    // 捕获JSON解析错误或者数据库保存错误
    return res.status(400).send({message: '参数非法或保存失败', error: err.message});
  }
}

验证说明

解析后的ingredients数组结构和你Schema定义的结构完全匹配,每个元素都包含String类型的name和Number类型的amount字段,Mongoose会自动完成格式校验,符合要求即可正常入库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:57:00