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

时间:2016-05-31 20:50:04

标签: html node.js express

我正在尝试使用常规表单提交一个对象数组,而不使用AJAX,并且发现不是将请求主体解析为对象数组,而是只有许多字段对应于对象的名称。 / p>

我知道在提交基元数组时,您只需填充许多具有相同名称的输入,它就会填充;但是,我似乎无法将其应用于复杂的物体。

我的表单代码非常简单:

<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>

我制作了一个示例存储库来演示我的问题; 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' }

是否可以按照我尝试的方式发布数据?

1 个答案:

答案 0 :(得分:4)

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

您无法发送数组,但可以发送数组的文本表示。

the data formats supported by 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);
});