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

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

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

谢谢!

  • 是否有一个asynchronousJSONparsing器的Node模块不会将整个JSONstring加载到内存中?
  • 在NodeJS中parsingJSON对象的数组
  • 当jsonparsing一个空的响应时,Whatwg Fetch失败,我该如何防止它?
  • 如何在使用`npm update`时更新package.json中的所有包版本号?
  • 如何使用CoffeeScript而不是JSON? 对于configuration文件等
  • Node.js Express接收邮差为空
  • 确保回送模型中唯一的字段值
  • 在node.js中引用带有forEach的JSON对象
  • 首先, 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结构。