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

Node.js调用Django REST Framework接口POST返回200但Postgres无数据存入

问题排查原因

前端侧核心问题(概率最高)

  • 提交的请求体为空:你当前代码中直接将document.getElementById('form')获取的DOM对象传入JSON.stringify(),DOM对象无法被序列化为表单键值对,最终发给后端的请求体是{}空对象,后端自然没有有效数据可以入库。
  • 判断逻辑完全无效:代码中x = document.getElementById('Date')拿到的是DOM元素对象,y = x.value是字符串值,两者比较x != y永远为真,这段逻辑无实际作用还增加了排查难度。

修复后的前端提交代码参考:

function handleSubmit(event) {
  event.preventDefault();
  // 正确序列化表单数据
  const formEl = document.getElementById('form');
  const formData = new FormData(formEl);
  const data = Object.fromEntries(formData.entries());
  
  fetch('http://127.0.0.1:8000/sender', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
  }).then(response => response.json()).then(data => {
    console.log('Success:', data);
  }).catch((error) => {
    console.error('Error:', error);
  });
}

const form = document.querySelector('form');
form.addEventListener('submit', handleSubmit);

后端侧可能的问题

  • Serializer配置错误或未执行保存:检查DRF的Serializer配置,确认fields字段包含所有前端提交的字段,且字段名、类型完全匹配;同时检查视图逻辑,确认调用serializer.is_valid()之后执行了serializer.save()方法,漏写save是DRF开发中常见的不入库原因。
  • 返回逻辑异常:如果你的视图没有做参数校验,哪怕收到空参数也直接返回200,就会出现状态码正常但无数据写入的情况,建议给Serializer的必填字段加上required=True配置,调用is_valid时开启raise_exception=True,参数错误时直接返回400方便排查。
  • 字段命名不匹配:Django模型默认使用蛇形命名(比如sender_id),如果前端提交的是驼峰命名(比如SenderId),需要在Serializer中显式指定source参数对应模型字段,否则字段值会被直接丢弃。
  • 事务或拦截逻辑问题:如果视图开启了事务管理,需要确认没有异常触发回滚;同时检查是否有中间件、权限拦截逻辑静默拦截了写入操作但仍然返回200。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:57:03