我的应用是使用Express的Node.js。
使用jQuery POST从我的客户端发送以下测试数据:
{
title: 'hello',
notes: [
{title: 'note 1'},
{title: 'note 2'}
]
}
这是我的服务器代码中的结果:
{ title: 'hello', notes: { '0': { title: 'note 1' }, '1': { title: 'note 2' } } }
我想把笔记数组作为数组插入我的数据库。我错过了什么?
因为我不能自己添加一个答案8小时(wtf?)但它并没有真正回答为什么Express.bodyParser不能正确解析JSON
好的,我可以使用以下命令让它工作:
JSON.stringify ( data )
在客户端,然后在服务器端使用
JSON.parse( req.rawBody )
这感觉不对,为什么Express.bodyParser不能正确解析JSON?!
4条答案
按热度按时间svmlkihl1#
关于你的客户:
在您的服务器上:
问题是jQuery在发送数据之前会对数据进行处理。如果你设置了正确的MIME类型,那么它会让你自由。
x0fgdtte2#
你能发布你的客户端jQuery代码吗?默认情况下,jQuery将以urlencoded的形式发送数据,而不是JSON。请参阅this question's answer以了解确保jQuery发送真实的JSON数据的方法。
仅供参考,express/connect bodyParser middleware只是使用JSON.parse来解析JSON(以及qs.parse来解析urlencoded数据)。我不认为这些代码中有任何明显的bug。因此,我认为你应该仔细检查你从浏览器发送的数据。
mctunoxg3#
我在寻找其他nodejs的东西时遇到了这个老问题。
jQuery.ajax()
函数使用JSON发送数据是一个常见的误解。jQuery发送的数据是POST数据,而不是JSON字符串。因此,所有数据类型(包括数组中的数字)都作为字符串发送。这意味着express将'array'键解析为字符串,并且由于在javascript中,数组如果不是对象就不能有字符串键,因此它被转换为对象。
neekobn84#
那就说得通了你可以使用
Express.bodyParser
来得到这样的结果,或者你可以使用JSON.parse
甚至eval('(' + myPostedData + ')')
来得到一个没有索引的结果对象。使用当前设置,您需要做的就是: