如何在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())