0

私は bodyParser ミドルウェア (技術的には、舞台裏でノードを形成可能) で express.js を使用しています。

ここにリストされている各データ要素の入力を表すフォームを取得して作成したいと思います。

{
  "name" : "asdf",
  "children" : [
       { 
         "child_name" : "xyz1234",
         "size" : 12
       },
       { 
         "child_name" : "1234aszds"
         "size": 14
       }
      ]
 }

ここでの子の数は動的になりますが、クライアント側で追加のフィールドを追加して、サーバー上の req.body にマップできるようにしたいと考えています。

注、生の POST 本文が node-formidable がそれらを配列に解析できるようにするための正しいエンコーディングを持つために、クライアントで入力に名前を付ける方法を探しています。

4

2 に答える 2

0

各フィールド名を解析して構造内の位置を決定しないと構造を定義する簡単な方法がないため、入力フィールドで 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.bodyutileライブラリの.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 の結合またはマージを参照してください。

うまくいけば、これは質問に答え、あなたを助けます!

于 2013-08-11T19:07:23.763 に答える