Mongoose如何解析FormData中JSON字符串格式的对象数组并存储
解决方法
你当前代码存在两个核心问题:
- 没有将前端传递的ingredients JSON字符串反序列化为对象数组
- 构造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
相关产品推荐
相关产品推荐

