使用带有输入字段的 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>
Formidable 会解释成这个 JSON 结构:
[ [ 'data[name]', 'name' ],
[ 'data[children][][child_name]', [ 'cname1', 'cname2' ] ],
[ 'data[children][][size]', [ 'csize1', 'csize2' ] ] ]
要以这种方式发布深层结构,我建议使用 AJAX 并改为发布完整的 JSON 对象,我在下面对此进行了概述。
以下应该允许您将所有字段直接复制到req.body
. 我选择使用util库中的.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)
如果您正在寻找一种合并对象的本机方式,请参阅在没有 jQuery 的情况下在 node.js 上合并或合并 JSON以了解执行此操作的方法。
希望这能回答问题并帮助您!