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

JavaScript & Node.js:控制器函数中JSON字符串格式异常排查

前端Ajax传JSON到Node.js后req.body格式异常的问题排查与解决

嘿,我来帮你搞定这个问题!你遇到的req.body格式乱掉的情况,核心原因是Ajax请求的内容类型设置错误,导致后端解析器把JSON字符串当成表单数据来处理了。

先看你的代码细节:你手动把对象转成了JSON字符串,但jQuery的Ajax在默认情况下,会把data参数里的字符串当成application/x-www-form-urlencoded(表单编码格式)发送,而非JSON格式。后端的解析器收到这种请求后,会把整个JSON字符串拆成奇怪的键值对——比如把{"add":{"id":"T1088",...当成一个字段名,后面的内容当成值,就出现了你看到的异常结构。

下面给你两种直接可行的解决办法:

方法一:让jQuery自动处理JSON(推荐)

不用手动调用JSON.stringify,直接传入JavaScript对象,同时设置contentType: 'application/json',jQuery会自动帮你完成序列化和请求头设置:

var getID = $('.input-id').val();
var getName = $('.input-name').val();
var books = $('.select-books').val();
var books = books.map(function(book) { return {id: book}; });
var dataaddID = {};
dataaddID['add'] = { id : getID, name : getName, books };

$.ajax({
  url:'/books/add',
  type:'POST',
  headers: {'X-CSRF-Token': csrfKey},
  dataType: 'json',
  contentType: 'application/json', // 关键:告诉后端这是JSON格式
  data: dataaddID, // 直接传对象,jQuery会自动转成JSON
  success:function(data){ console.log(data); }
});

方法二:手动序列化但指定内容类型

如果你坚持手动用JSON.stringify,必须要设置contentType: 'application/json',否则后端不知道要按JSON解析:

var getID = $('.input-id').val();
var getName = $('.input-name').val();
var books = $('.select-books').val();
var books = books.map(function(book) { return {id: book}; });
var dataaddID = {};
dataaddID['add'] = { id : getID, name : getName, books };
var jsonaddID = JSON.stringify(dataaddID);
console.log(jsonaddID);

$.ajax({
  url:'/books/add',
  type:'POST',
  headers: {'X-CSRF-Token': csrfKey},
  dataType: 'json',
  contentType: 'application/json', // 必须添加这个请求头
  data: jsonaddID,
  success:function(data){ console.log(data); }
});

后端也要确认配置

另外,别忘了在你的Node.js/Express项目中,确保已经启用了JSON解析中间件,这样后端才能正确解析JSON格式的请求体:

// 在项目入口文件(比如app.js)中添加
const express = require('express');
const app = express();

// 解析application/json格式的请求体
app.use(express.json());

这样修改之后,后端的req.body就能正确拿到你期望的JSON结构了,试试吧!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:32:28