在expression式中,是否可以在没有AJAX的情况下POST一个对象数组?

我试图提交一个对象数组使用常规的forms,没有AJAX,我发现,而不是请求正文被分析成一个对象数组它只是有很多对象的名称对应的字段。

我知道在提交一个基元数组的时候,你只需要用相同的名字填充许多input,它就会填充; 然而,我似乎无法把我的脑袋应用到复杂的对象。

我的表单代码相当简单:

<div class="col-sm-9"> <div class="row"> <div class="col-md-6"> <div class="form"> <div class="form-group"> <label for="attachment[0].name" class="control-label">Name</label> <input name="attachment[0].name" class="form-control" value="First Name" type="text"> </div> <div class="form-group"> <label for="attachment[0].uri" class="control-label">URI</label> <input name="attachment[0].uri" class="form-control" value="First URI" type="text"> </div> <div class="form-group"> <label for="attachment[0].description" class="control-label">Description</label> <textarea rows="4" value="First Description" name="attachment[0].description" class="form-control">First Description</textarea> </div> </div> </div> </div> <div class="row"> <div class="col-md-6"> <div class="form"> <div class="form-group"> <label for="attachment[1].name" class="control-label" >Name</label> <input name="attachment[1].name" class="form-control" value="Second Name" type="text"> </div> <div class="form-group"> <label for="attachment[1].uri" class="control-label">URI</label> <input name="attachment[1].uri" class="form-control" value="Second URI" type="text"> </div> <div class="form-group"> <label for="attachment[1].description" class="control-label">Description</label> <textarea rows="4" name="attachment[1].description" class="form-control">Second Description</textarea> </div> </div> </div> </div> 

我已经build立了一个示例库来展示我的问题。 https://github.com/xueye/express-form-issue在那里你可以运行node server.js ,导航到http://localhost:3000并提交条目; 请求主体将显示在您的控制台中,它应显示为:

 { name: '', type: '', 'attachment[0].name': 'First Name', 'attachment[0].uri': 'First URI', 'attachment[0].description': 'First Description', 'attachment[1].name': 'Second Name', 'attachment[1].uri': 'Second URI', 'attachment[1].description': 'Second Description' } 

是否有可能以我试图的方式发布数据?

当您使用常规表单或使用JavaScript进行POST请求时,您将格式化的文本发送到服务器。

您不能发送数组,但可以发送数组的文本表示forms。

表单支持的数据格式都没有标准方法来表示数据数组。

模式(由PHP引入)使用方括号来描述类似数组的结构。

这与您使用的类似,除了有时使用JavaScript风格的点符号。 切换到纯粹使用方括号。

 name="attachment[1][uri]" 

…但你需要解码服务器上的数据格式。

在Express 4中使用:

 var bodyParser = require("body-parser"); var phpStyleParser = bodyParser.urlencoded({ extended: true }) 

 app.post('/example', phpStyleParser, function(req, res) { console.log(req.body); res.json(req.body); });