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

部署在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));
}

额外排查点

  1. 前端值有效性检查:通过console.log确认s、h、t是否确实获取到用户输入,避免DOM选择器错误导致值为空。
  2. 字段级权限验证:在Strapi后台的Content-Type Builder中,不仅要给public角色开模型的创建权限,还要确认subject、homework、date这三个字段本身也开启了public角色的创建权限。
  3. CORS配置验证:虽然GET请求正常,但POST可能存在CORS限制,可在Strapi后台Settings > CORS中,临时将Access-Control-Allow-Origin设为*测试(生产环境需指定具体域名)。
  4. 版本兼容性:确认使用的Strapi版本与官方文档一致,v4和v3的API结构差异极大,不要混用规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:42:02