如何在Node.js中获取POSTed(jquery)数组数据(使用express)

我正在尝试将数组发布到我的服务器。 但我很难做到这一点。

我试图发布的数组是一个动态结构化的对象数组,因此我不知道它的长度。

更确切地说,我的数组就是这种forms。

var names =[{id:1, name:"nick"},{id:2,name:"bob"},{id:3,name:"john"}.....{id:n, name:"whatever"}] 

我使用jquery发布:

 $.post("save_names", { 'names[]': names }, function(results) { alert(results); }); 

我的节点代码如下:(我使用stormpath-express)

 app.post('/save_names', config.access_group, function(req, res) { console.log("body ", req.body); }); 

这样我从console.log获得以下内容

 body { 'names[]': [ '[object Object]', '[object Object]', '[object Object]' ] } 

当我尝试打印数组时: console.log("body ", req.body.names); 我的body undefined

有人可以解释为什么会这样吗? 如何解决我的错误,为什么我不能只发布名称:名称和简单的工作?

您发送的数据不正确。 您可以在开发工具中检查请求。 你会看到这样的事情:

 Form Data names[]:[object Object] names[]:[object Object] names[]:[object Object] names[]:[object Object] 

尝试自己将数据转换为JSON:

 $.post("save_names", { 'names[]': JSON.stringify(names) }, function(results) { alert(results); }); 

不要忘记正确访问你的数组: console.log("body ", req.body['names[]']);

是的,你req.body包含键names[] ,而不是names 。 所以你可以从req.body['names[]']或者重写代码以获得名称对象:

 $.post("save_names", { names: names }, function(results) { alert(results); }); 

并表达代码:

 app.post('/alter_offer_sort', config.access_group, function(req, res) { console.log("body ", req.body.names); }); 

PS可能你从GET查询中获取[]名称。 这不是POST的工作方式。

更新

我也没注意到,只有对象的字符串,所以初始化bodyParser。

首先安装body-parser:

 npm install --save body-parser 

然后将代码修改为:

 var express = require('express') var bodyParser = require('body-parser') var app = express() // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json())