2016-06-24 3 views
0

これはnode.js、Express、およびMongooseプロジェクトです。node.jsの関数をループする

フォームフィールド(果実の価格)から入力を配列にプッシュしようとしています。私のDBには果物の名前があります。フルーツの各部分は、多くの価格を持つことができます。ユーザーは、配列としてフルーツのさまざまな価格を自分のフォームに入力します。ここで

router.post('/fruit', function(req, res) { 
    //Some code to match the name of the fruit entered by user to the name of the fruit in the DB 
    if(!existingFruit) { 
    //Some code 
    } 
    if(existingFruit) { 
     Fruit.findOneAndUpdate({fruit: req.body.fruit}, { 
      $push: { price: req.body.price1 }}, 
    //Some code which tells the user whether the price they entered was inserted into the DB or not 
}); 

は、問題の入力フィールドです:私のバックエンドのコード、およびフォームフィールドとして

<label for="price1">Price</label> 
<input type="text" name="price1" id="price1"/> 

<label for="price2">Price</label> 
<input type="text" name="price2" id="price2"/> 

、「price1」に入力された価格は、DBに挿入されるだけで立っています。

私は疑問に思っています...入力フィールド 'price2'、 'price3'などに入力された値を取得するためにバックエンドコードを繰り返しループする方法があります...

+0

多分:.. {価格:[req.body.price1、req.body.price2、...]} ...? –

+0

この問題は、ユーザーが1から無限の価格(価格フィールドを追加できる+/-ボタンにアクセスできる)からどこにでも入力できることです。だからあなたが提案した方法はこの状況ではうまくいかないでしょう。 – MonkeyOnARock

+0

Mongoコレクションフィールドを更新する部分には、配列でなければならないので動作します。任意の数の値を扱う方法を知るには、Paul amd PRDevingの回答を見てください。 –

答えて

0

あなたはすべてのフィールドを反復するために、このような何かを行うことができます。

let i = 0; 
let field; 
while (field = form['price' + i++]) { 
    ... 
} 
+0

これを私のバックエンドコードに追加することを意味すると思いますか?いくつかの問題...最初は、私の現在のバージョンのノードが 'let'の使用を許さないということです。 2番目の問題は、自分のコードをどのように私のものに追加するのかがはっきりしないことです。 「フィールド」とはどういう意味ですか?私は知っている、私はこれにひどいです。 – MonkeyOnARock

0

Expressのボディパーサーは、フォームのフィールド名の配列へのアクセスのための規則を使用しています。だから、あなたのフォーム入力に名前をつけると:prices [0]、bodyがあなたのpostメソッドに到達するまでにreq.body.pricesの最初の要素になります。

あなたもオブジェクトを作成できます。名前と値のフルーツの配列が必要な場合は、 "fruits [0] .name"や "fruits [0] .prices [0] "

+0

価格フィールドの名前をprice [0]とprice [1]に変更しました。しかし、バックエンドコードのこの部分を調整するには、どうすればいいのですか?req.body.price – MonkeyOnARock

+0

これは今すぐ配列になります。 – Paul