使用带有输入字段的 HTML 表单会出现问题,因为如果不解析每个字段名称以确定其在结构中的位置,就没有简单的方法来定义结构。
例如,如果您发布了以下内容:
<form action="/post" method="post">
<input type="text" name="data[name]">
<input type="text" name="data[children][][child_name]">
<input type="text" name="data[children][][size]">
<input type="text" name="data[children][][child_name]">
<input type="text" name="data[children][][size]">
<input type="submit" value="Submit">
</form>
强大的会解释成这个 JSON 结构:
[ [ 'data[name]', 'name' ],
[ 'data[children][][child_name]', [ 'cname1', 'cname2' ] ],
[ 'data[children][][size]', [ 'csize1', 'csize2' ] ] ]
要以这种方式发布深层结构,我建议使用 AJAX 并改为发布完整的 JSON 对象,如下所述。
以下内容应允许您将所有字段直接复制到req.body。我选择使用 utile 库中的 .mixin() 助手。
var utile = require('utile')
var form = new formidable.IncomingForm()
, fields = {}
form
.on('field', function (field, value) {
fields[field] = value
})
.on('end', function () {
req.body = utile.mixin(req.body, fields)
})
根据问题本身中的 JSON,您可以像这样访问您的值:
console.log(req.body.children[0].child_name)
如果您正在寻找合并对象的本机方式,请参阅Combine or merge JSON on node.js without jQuery 了解执行此操作的方法。
希望这能回答问题并帮助您!