как повторить идентификатор для определения длины массива в NodeJS и knexJS

#javascript #arrays #json #loops #knex.js

#javascript #массивы #json #циклы #knex.js

Вопрос:

Я хочу добавить массив элементов с одинаковым идентификатором orderId , поэтому мне нужно, чтобы идентификатор orderId повторялся для длины массива, как мне это сделать?

Мой код:

 const handleOrdersPost = (req, res, db) => {
const { customerId, orderStatus, productId, quantity, price} = req.body;
    if (!customerId || !orderStatus || !productId || !quantity || !price) {
        return res.status(400).json('incorrect form submission');
    }

    db.transaction(trx =>{
        trx.insert({
            customerId: customerId,
            orderStatus: orderStatus,
            orderDate: new Date()
            })
        .into('orders')
        .returning('orderId')
        .then(orderId => {
            return trx('orderitem')
            .returning('*')
            .insert({
                orderId: orderId,
                productId: [productId],
                quantity: [quantity],
                price: [price]
                })
            .then(order => {
            res.json('success');
            })
        })
        .then(trx.commit)
        .catch(trx.rollback)
    })


    .catch(err => res.status(400).json('unable to submit order '   err))
}

module.exports = {
    handleOrdersPost: handleOrdersPost
};
  

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

Ответ №1:

В одной транзакции множество идентификаторов вставляемых элементов будут и должны быть упорядочены, поэтому вам нужно зациклить свой массив и посчитать orderId

таким образом, ваш код может выглядеть следующим образом:

 const array = [];
db.transaction((trx) => {
  db.insert([])
  .into('orders')
  .transacting(trx)
  .then((ids) => {
    const orderItems = [];
    orderItems.forEach((item, index) => {
      item.orderId = ids[0]   index;
    });
    return db.insert(orderItems)
    .into('orderItem)
    .transacting(trx);
  })
  .then(trx.commit)
  .catch(trx.rollback);
})