Node.js - 使用 json.stringify 时,正文搞砸了
Posted
技术标签:
【中文标题】Node.js - 使用 json.stringify 时,正文搞砸了【英文标题】:Node.js - Body is messed up when using json.stringify 【发布时间】:2014-07-31 16:19:49 【问题描述】:客户:
$.ajax(
url: some_url,
type: 'post',
dataType: 'json',
data: JSON.stringify(myArray: [])
...
$.ajax(
url: some_url,
type: 'post',
data: myArray: []
...
服务器:
var app = express();
app.use(bodyParser()); // body-parser module
app.use(function(req, res, next)
console.log(req.body);
// When stringified, prints: '"myArray":': ']': ''
// When not stringified, prints:
);
我知道因为我的数组是空的,所以没有发布它,但我完全不明白为什么在字符串化时输出如此混乱。是body parser引起的吗?
我要做的就是检索我的数组并在其上循环。如果它是空的,那就这样吧。
谢谢!
【问题讨论】:
【参考方案1】:bodyParser()
中间件根据请求的Content-Type
标头进行解码,可以通过contentType
option设置:
data: JSON.stringify( myArray: [] ),
contentType: 'application/json',
如果不指定 contentType
是 JSON,解析器将尝试基于 URL 编码的默认值进行解码,从而产生您看到的 body
结构。
【讨论】:
我接受了 mscdex 的回答,因为它解释了为什么身体如此混乱,但你的回答同样好,如果可以的话,我会接受。【参考方案2】:首先,dataType
只会影响服务器响应。与请求数据无关。
其次,损坏对象的原因是默认情况下 jQuery 的 ajax()
发送 Content-Type
的 application/x-www-form-urlencoded
。此外,body-parser
中间件默认使用qs
npm 模块来解析application/x-www-form-urlencoded
,而不是内置的querystring
节点模块。 qs
模块支持querystring
之外的功能,包括嵌套语法(例如foo[bar]=baz
和foo[]=baz
)。所以qs
看到[
并认为它是嵌套语法的开始。从那里开始,它取决于qs
的实现,以了解格式错误的输入的输出。
【讨论】:
以上是关于Node.js - 使用 json.stringify 时,正文搞砸了的主要内容,如果未能解决你的问题,请参考以下文章