Node.js – 当使用json.stringify时,Body会搞砸

客户:

$.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: {} }); 

我明白,因为我的数组是空的,它不是张贴,但我完全困惑,为什么输出是如此搞砸了串化。 它是由身体分析器造成的吗?

我想要做的就是检索我的数组,并在其上循环。 如果它是空的,就这样吧。

谢谢!

首先, dataType只影响服务器响应 。 它与请求数据无关。

其次,被破坏对象的原因是,默认情况下,jQuery的ajax()发送一个Content-Typeapplication/x-www-form-urlencoded 。 此外, body-parser中间件将默认使用qs npm模块来parsingapplication/x-www-form-urlencoded而不是内置querystring节点模块。 qs模块支持超出querystring ,包括嵌套语法(例如foo[bar]=bazfoo[]=baz )。 所以qs看到[并认为这是嵌套语法的开始。 从那里,它取决于qs的实现,以什么输出看起来像格式错误的input。

bodyParser()中间件根据请求的Content-Type头解码,可以用contentType选项设置:

 data: JSON.stringify({ myArray: [] }), contentType: 'application/json', 

在没有指定contentType是JSON的情况下,parsing器将尝试根据默认的URL编码进行解码,从而生成您看到的body结构。