部署在Heroku上的Strapi接口POST请求返回空值求助
问题分析与解决
核心问题:请求数据结构不符合Strapi v4规范
你的POST请求JSON结构有误,Strapi v4的REST API创建条目时,data字段下直接放置模型属性即可,不需要嵌套attributes层级;同时id由后端自动生成,无需手动传入。这是导致所有字段返回null的直接原因。
错误的请求结构:
JSON.stringify({ "data": { "id": i, "attributes": {subject: `${s}`, homework: `${h}`, date: `${t}`} } })
修正后的请求结构:
JSON.stringify({ "data": { subject: s, homework: h, date: t } })
完整修正后的代码
function registerHomework(){ var s = document.getElementById("subject").value var h = document.getElementById("homework").value var t = new Date().toISOString().slice(0, 10) // 调试用:确认前端是否正确获取到表单值 console.log("表单获取值:", s, h, t); fetch('https://agenda-back.herokuapp.com/api/homeworks', { method: 'POST', headers: { 'Accept': 'application/json', "Content-Type": "application/json; charset=UTF-8" }, body: JSON.stringify({ "data": { subject: s, homework: h, date: t } }) }) .then(response => response.json()) .then(data => console.log("创建成功返回:", data)) .catch(error => console.error("请求异常:", error)); }
额外排查点
- 前端值有效性检查:通过
console.log确认s、h、t是否确实获取到用户输入,避免DOM选择器错误导致值为空。 - 字段级权限验证:在Strapi后台的Content-Type Builder中,不仅要给
public角色开模型的创建权限,还要确认subject、homework、date这三个字段本身也开启了public角色的创建权限。 - CORS配置验证:虽然GET请求正常,但POST可能存在CORS限制,可在Strapi后台Settings > CORS中,临时将
Access-Control-Allow-Origin设为*测试(生产环境需指定具体域名)。 - 版本兼容性:确认使用的Strapi版本与官方文档一致,v4和v3的API结构差异极大,不要混用规范。
内容的提问来源于stack exchange,提问作者patatafly
相关产品推荐
相关产品推荐

