2016-06-24 3 views
0

Это проект node.js, Express и Mongoose.Завершить функцию в node.js

Я пытаюсь вставить входные данные из поля формы (цены на фрукты) в массив. В моей БД есть имена фруктов. Каждый кусочек фруктов может иметь много цен. Пользователи вводят много разных цен на фрукты, как массив, в мою форму.

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» будет вставлены в БД.

Так что я задаюсь вопросом ... есть ли способ для меня снова и снова зацикливать мой внутренний код, чтобы он мог получить значения, введенные в поле ввода «цена2», «цена3» и т. Д.

+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». Вторая проблема заключается в том, что я не совсем уверен, как добавить код в свою? Что именно представляет собой «поле»? Я знаю, я ужасен в этом. – MonkeyOnARock

0

Экспресс-анализатор тело использует соглашение для доступа к массиву в именах полей для форм. Поэтому, если вы назовете свою форму, введите что-то вроде: prices [0], к тому времени, когда тело получит ваш метод post, это будет первый элемент в req.body.prices.

Fwiw вы также можете делать объекты, поэтому, если вам нужен массив фруктов с именами и значениями, вы можете создавать входы форм с именами типа «фрукты [0] .name» и «fruits [0] .prices [0] "

+0

Так изменили названия моих полей цены: цена [0] и цена [1]. Но как мне настроить эту часть моего внутреннего кода, чтобы он работал: req.body.price – MonkeyOnARock

+0

Теперь это будет массив. – Paul