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-Type
的application/x-www-form-urlencoded
。 此外, body-parser
中间件将默认使用qs
npm模块来parsingapplication/x-www-form-urlencoded
而不是内置querystring
节点模块。 qs
模块支持超出querystring
,包括嵌套语法(例如foo[bar]=baz
和foo[]=baz
)。 所以qs
看到[
并认为这是嵌套语法的开始。 从那里,它取决于qs
的实现,以什么输出看起来像格式错误的input。
bodyParser()
中间件根据请求的Content-Type
头解码,可以用contentType
选项设置:
data: JSON.stringify({ myArray: [] }), contentType: 'application/json',
在没有指定contentType
是JSON的情况下,parsing器将尝试根据默认的URL编码进行解码,从而生成您看到的body
结构。