如何使用 express.bodyParser/node-formidable 解析嵌套元素?
Posted
技术标签:
【中文标题】如何使用 express.bodyParser/node-formidable 解析嵌套元素?【英文标题】:How does one parse nested elements using express.bodyParser/node-formidable? 【发布时间】:2013-08-13 01:50:16 【问题描述】:我正在使用 express.js 和 bodyParser 中间件(从技术上讲,它在幕后是节点强大的)。
我想创建一个表格来代表此处列出的每个数据元素的输入:
"name" : "asdf",
"children" : [
"child_name" : "xyz1234",
"size" : 12
,
"child_name" : "1234aszds"
"size": 14
]
这里的子节点数量是动态的,但我希望能够在客户端添加其他字段,并将它们映射到服务器上的 req.body 中。
注意,我正在寻找如何在客户端中命名输入,以便原始 POST 正文具有正确的编码,从而允许 node-formidable 将它们解析成一个数组。
【问题讨论】:
【参考方案1】:实现这一点的一般方法如下(为清楚起见,排除非必要属性):
<input name="name"/>
<input name="children[0[child_name]"/>
<input name="children[0[size]"/>
<input name="children[1[child_name]"/>
<input name="children[1[size]"/>
请注意,方括号不平衡,这是必需的,因为“querystring”包中存在“错误”(或者,至少在 2013 年 8 月 20 日看起来如此)。
但是,如果方括号不平衡,如上所述,结果是这将被解析为我原始问题中请求的对象结构(即,这将作为“req.body”提供)。
这样做的好处是它不需要任何 javascript 来对表单提交进行任何“预飞行”。
【讨论】:
【参考方案2】:使用带有输入字段的 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 了解执行此操作的方法。
希望这能回答问题并帮助您!
【讨论】:
以上是关于如何使用 express.bodyParser/node-formidable 解析嵌套元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?