如何解决动态POST请求Body时出现的400 Bad Request错误?
解决POST请求JSON解析错误(位置7意外token s)导致的400 Bad Request
核心问题分析
错误提示JSON解析时位置7出现意外的token s,本质是Postman发送的请求Body不符合JSON语法规范,服务器解析到第7个字符时遇到了无效的s字符,直接触发400错误。
排查与解决步骤
1. 先查Postman请求Body的语法
- 确认Postman中请求Body选的是
raw格式,右侧下拉框必须选中JSON(别选Text或其他) - 重点检查JSON语法细节:
- 所有字符串、键名必须用双引号包裹,绝对不能用单引号(比如
"name": "张三"是对的,'name': '张三'直接会报错) - 数组/对象末尾不能多写逗号,字段之间的逗号不能漏
- 位置7的
s大概率是单引号的开头(比如写了'name'),或者是其他不符合JSON规范的字符
- 所有字符串、键名必须用双引号包裹,绝对不能用单引号(比如
- 正确示例JSON:
{ "name": "张三", "age": 22, "major": "软件工程" }
2. 检查后端的JSON解析配置
打开你的app.js,确认已经正确配置了Express的JSON解析中间件:
const express = require('express'); const app = express(); // 必须添加这一行,用来解析application/json格式的请求体 app.use(express.json());
如果没加这行代码,服务器根本无法识别JSON格式的请求体,必然会触发解析错误。
3. 验证请求头设置
Postman的请求头里,Content-Type必须设置为application/json,要是设成text/plain或者其他值,服务器也没法正确解析JSON。
4. 结合你的代码做补充排查
- 查看
students.js里的POST路由逻辑,有没有手动解析请求体的错误代码 students.model.js的Schema定义一般不会直接导致JSON解析错误,除非你在中间件里加了自定义的错误解析逻辑,但先优先排查前面的点
快速验证方案
先给服务器发一个极简的正确JSON请求:
{"name":"testStudent"}
如果这个请求能成功,说明之前的请求Body肯定有语法问题;如果还是报错,再回头检查后端的中间件配置。
内容的提问来源于stack exchange,提问作者Abrham_m
相关产品推荐
相关产品推荐

