将Express的POST数组数据解析为JSON

JMW*_*ker 7 javascript connect node.js express

我的应用程序是Node.js使用Express.

使用jQuery POST从我的客户端发送此测试数据:

{
title: 'hello',
notes: [
{title: 'note 1'},
{title: 'note 2'}
]
Run Code Online (Sandbox Code Playgroud)

}

这是我的服务器代码中的结果:

{ title: 'hello', notes: { '0': { title: 'note 1' }, '1': { title: 'note 2' } } }
Run Code Online (Sandbox Code Playgroud)

我希望将数组的注释作为数组插入到我的数据库中.我错过了什么?


因为我无法自己添加8小时的答案(wtf?)但是它并没有真正回答为什么Express.bodyParser无法正确解析JSON

好的,我可以使用以下方式让它工作:

JSON.stringify ( data )
Run Code Online (Sandbox Code Playgroud)

在客户端然后服务器端使用

JSON.parse( req.rawBody )
Run Code Online (Sandbox Code Playgroud)

这确实有问题,为什么Express.bodyParser无法正确解析JSON?!

Raj*_*jat 17

在您的客户端:

$.ajax({
  type: 'POST',
  data: JSON.stringify(data),
  contentType: 'application/json',
  url: '/endpoint'
});
Run Code Online (Sandbox Code Playgroud)

在您的服务器上:

console.log('POST: ',req.body);
Run Code Online (Sandbox Code Playgroud)

问题是jQuery在发送之前弄乱了你的数据.如果您设置了正确的MIME类型,那么它就会让您自由.


Tej*_*ejs -4

那么这一切就都有意义了;您可以使用Express.bodyParser来获取这样的结果,或者您可以使用JSON.parse甚至eval('(' + myPostedData + ')')来获取没有索引的结果对象。

根据您当前的设置,您需要做的就是:

for(var j = 0; j < myVariable.notes.length; j++)
{
    var currentNode = myVariable.notes[j];

    //currentode.title should be 'note 1' for j = 0, etc
}
Run Code Online (Sandbox Code Playgroud)

  • 对客户端提交的数据使用“eval”是一个巨大的安全漏洞。作为一般规则,应该避免使用“eval”,并且考虑到 javascript 中内省和元编程的其他选项,几乎没有必要使用“eval”。 (4认同)