#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);
})