Подсчет количества элементов во вложенном массиве ExpressJS - PullRequest
0 голосов
/ 19 января 2019

Вставка элементов в базу данных с помощью Sequelize в ExpressJS. В зависимости от количества элементов, вставляемых в представление, используется либо create, либо bulkcreate.

module.exports.create = async (req, res) => {
  try {
    const plan_id = req.body.plan_id;
    if(req.body.activities < 2) {
      let activities = {
        activity_name: req.body.activities[0].name,
        comment: req.body.activities[0].comment,
        plans_id: plan_id
      }
      console.log(activities);
      await ActivityModel.Activity.create(activities);
      console.log('insert succeeded');
      res.redirect('/plans/edit/' + plan_id);
    }
    let activities = req.body.activities[0].name.map(
      (name, i) => {
        return {
          activity_name: name,
          comment: req.body.activities[0].comment[i],
          plans_id: plan_id
        }
      });
    await ActivityModel.Activity.bulkCreate(activities);

    res.redirect('/plans/edit/' + plan_id);
  }
  catch(error) {
    res.send(error);
  }
};

Попытка использовать массовое создание в зависимости от размера массива деятельностей [] [name] из шаблона представления.

  <input type="text" class="form-control" name="activities[][name]" placeholder="Activity">
  <label>Comment</label>
  <input type="text" class="form-control" name="activities[][comment]" placeholder="Comment">

Когда используется действие [0] .name.length, если к нему добавляется только 1 элемент, req.body.activities выглядит так: [ { name: 'asd', comment: 'asd' } ] где name - это объект. Если одновременно больше элементов [ { name: [ 'a3', 'a4' ], comment: [ 'c3', 'c4' ] } ], свойство name становится массивом.

Ищите способ измерить это в операторе if в контроллере, чтобы иметь возможность массового создания многих и, если только, одного элемента, создайте один экземпляр.

1 Ответ

0 голосов
/ 20 января 2019

Решается добавлением скрытого ввода в форму с массивом, содержащим индекс, который увеличивается с каждым добавляемым экземпляром.

<input type="hidden" name="idx[]" value="0">

В контроллере запускается chekc, решающий, следует ли использовать create или bulkcreate.

if(req.body.idx <= 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...