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

添加数组后,Postman发送JSON至Node.js服务出现语法错误求助

问题分析与解决方案

首先明确:这个错误的直接原因是Postman发送的JSON格式严重错误,导致Node.js的body-parser无法正常解析。不过你的Node.js代码也存在一些逻辑问题,咱们一步步来修复:

1. 先修复Postman的JSON请求体

你现在把info和review都错误地写成了字符串(用双引号包裹了整个对象),而且内部的JSON还有语法错误(缺少逗号、引号不匹配)。正确的JSON应该是嵌套对象,不需要把整个对象用引号包起来,同时键名要和你的Schema定义完全对应。

正确的请求JSON应该是这样的:

{
  "info": {
    "title": "test title",
    "bad_point": 0,
    "Tag": "tag1"
  },
  "review": {
    "Review_text": ["1번리뷰", "2번리뷰", "3번리뷰"],
    "Phone_list": ["010-0000-0000", "010-1111-1111", "010-2222-2222"],
    "LatLng_list": ["111.1111,111.1111", "222.222,222.222","333.3333,333.3333"]
  }
}

核心修正点:

  • 去掉info和review外层的双引号,让它们成为JSON对象而非字符串
  • 把badPoint改成Schema里定义的bad_point,并且用数字0而非字符串"0"(因为你的Schema里bad_point是Number类型)
  • 补上bad_point后面缺失的逗号
  • 修正Phone_list的引号冲突问题(你原来的写法会导致JSON解析器识别错误)

2. 修复Node.js代码中的问题

2.1 Schema的create方法变量未解构

你的Item.statics.create方法里直接使用了title, bad_point, Tag,但这些变量并没有从传入的info参数里解构出来,会导致ReferenceError。修改成这样:

Item.statics.create = function(info, review){
  // 从info参数里解构出需要的字段
  const { title, bad_point, Tag } = info;
  const list = new this({
    info:{ title, bad_point, Tag },
    review:{ 
      Review_text: review.Review_text, 
      Phone_list: review.Phone_list, 
      LatLng_list: review.LatLng_list 
    }
  });
  return list.save();
};

2.2 register函数的逻辑错误

你的register函数里调用了RouteReviewItem.findOneBytitle(title),但title变量并没有定义,而且如果是创建新数据,需要先检查该title是否已存在(如果有这个需求的话)。修改后的代码:

exports.register = (req, res) => {
  const { info, review } = req.body;
  // 先从info里解构出title
  const { title } = info;

  const create = () => {
    return Item.create(info, review);
  };

  const respond = () => {
    res.json({ message: 'place route registered successfully' });
  };

  const onError = (error) => {
    res.status(409).json({ message: error.message });
  };

  // 如果需要检查title是否已存在,用Mongoose的findOne方法查询
  RouteReviewItem.findOne({ "info.title": title })
    .then((existingItem) => {
      if (existingItem) {
        throw new Error('This title already exists');
      }
      return create();
    })
    .then(respond)
    .catch(onError);
};

修正说明:

  • 从info里解构出title,用于后续的查重逻辑
  • 替换了自定义的findOneBytitle(如果不是你自己封装的方法,Mongoose默认没有这个方法),改用标准的findOne查询嵌套字段
  • 增加了查重逻辑,如果已存在同名title则抛出错误,否则执行创建操作

3. 验证修复效果

  1. 把Postman的请求体替换成正确的JSON格式
  2. 重启你的Node.js服务
  3. 重新发送请求,应该就能正常创建数据了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:12