各フィールド名を解析して構造内の位置を決定しないと構造を定義する簡単な方法がないため、入力フィールドで 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
。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)
オブジェクトをマージするネイティブな方法を探している場合は、jQuery を使用しない node.js での JSON の結合またはマージを参照してください。
うまくいけば、これは質問に答え、あなたを助けます!