前端传递Questions对象发送POST请求时出现422 (Unprocessable Entity)错误
这种情况我之前也碰到过——LoopBack Explorer能正常创建对象,但自己写的前端POST请求就报422(Unprocessable Entity),核心原因基本都是前端请求的格式/参数和后端接口的预期不匹配,咱们一步步来排查:
1. 检查请求头的Content-Type是否正确
LoopBack默认接收JSON格式的请求体,所以前端必须在请求头里明确设置:
headers: { 'Content-Type': 'application/json' }
如果你的请求用了form-data或者x-www-form-urlencoded格式,后端会无法解析JSON结构的Questions对象,直接返回422。你可以打开浏览器开发者工具(F12),在Network标签里查看POST请求的Request Headers,确认Content-Type是不是application/json。
2. 核对请求体的字段名和数据类型
仔细对比你前端发送的对象和示例:
- 字段名必须完全一致,比如
requireMeeting是驼峰写法,别写成requiremeeting或者require_meeting; - 数据类型要严格匹配:
requireMeeting必须是布尔值true/false,不能是字符串"true"或者数字1; - 不要少传必填字段,也别多传后端没定义的冗余字段(比如额外加了个
id字段,后端校验不通过也会返回422)。
你可以在开发者工具的Network标签里,查看POST请求的Request Payload,把它和LoopBack Explorer里发送的请求体对比(Explorer里可以直接查看Request Body的标准示例),就能很快找到差异。
3. 检查请求体的JSON格式是否合法
有时候前端拼接JSON的时候会出现语法错误,比如少了引号、逗号,或者用了单引号(JSON要求统一用双引号)。比如错误写法:
// 错误:用了单引号 { 'description': 'What is ecommerce', 'requireMeeting': true, 'expID': '1234' }
正确写法必须用双引号:
{ "description": "What is ecommerce", "requireMeeting": true, "expID": "1234" }
如果是用JavaScript对象直接传参,建议手动用JSON.stringify()转换为标准JSON字符串再发送,避免部分HTTP库自动转换时出现格式问题。
4. 查看后端的详细错误提示
422错误通常会附带具体的校验失败信息,你可以在开发者工具的Response标签里查看返回内容——比如后端可能会提示“requireMeeting字段必须是布尔值”或者“缺少description必填字段”,根据提示直接修复问题就行。
内容的提问来源于stack exchange,提问作者M.A.G

