Я создаю корзину для виртуального магазина, и при нажатии кнопки «Отправить» мне нужно вставить заказ в таблицу «Заказ», а товары - в таблицу «Элементы заказа».
Я использовал экспресс для вставки вещей только в одну таблицу для каждой функции, но теперь мне нужно поместить обе в одну и ту же ... Я пытаюсь сделать это с обещаниями.
Это мой HTML:
<table class="table">
<thead>
<tr scope="row">
<th scope="col">Product name</th>
<th scope="col">Price</th>
<th scope="col">Quantity</th>
</tr>
</thead>
<tbody>
<tr v-for="product in cart" v-bind:key="product.id" scope="row">
<td scope="col">{{product.name}}</td>
<td scope="col">{{product.price | currency}}</td>
<td scope="col"><input type="text" class="input-group-text" v-model="product.quantity"></td>
</tr>
<tr>
<td colspan="3">Frete: {{fare | currency}}</td>
</tr>
<tr>
<td colspan="3" class="highlighted">Total: {{total | currency}}</td>
</tr>
</tbody>
</table>
<button class="btn btn-info" @click="registerTransaction()">Submit cart</button>
это функция, которую я вызываю:
registerTransaction(){
const date = new Date()
const dateTime = {
day: date.getUTCDate(),
month: date.getUTCMonth(),
year: date.getUTCFullYear(),
hour: date.getUTCHours() - 3,
minute: date.getUTCMinutes(),
sec: date.getUTCSeconds()
}
const transaction = {
date: new Date(`${dateTime.year}-${dateTime.month}-${dateTime.day}T${dateTime.hour}:${dateTime.minute}:${dateTime.sec}Z`)
}
transaction.userid = 1
transaction.fare = parseFloat(this.fare)
transaction.total = parseFloat(this.total)
transaction.cart = this.cart
axios.post(`${baseApiUrl}/checkout`, transaction)
.then(() => this.$toasted.global.defaultSuccess())
.catch(showError)
}
и это мой бэкэнд для axios:
const save = (req, res) =>{
const transaction = {...req.body}
try{
existsOrError(transaction.date, "Error: transaction date is invalid")
existsOrError(transaction.userid, "Error in the user authentication")
//existsOrError(transaction.fare, "Error in calculating the fare")
existsOrError(transaction.total, "Error in the total value")
}
catch(msg){
return res.status(400).send(msg)
}
app.db('orders')
.insert(transaction)
.then(console.log('feito!'))
.then(saveProducts(transaction))
.catch(err => res.status(500).send(err))
}
const saveProducts = (transaction) => {
const orderId = app.db(`orders`).select(`idOrder`) .where({idClient: transaction.userid}).last()
console.log('Done')
for(let i = 0; i < transaction.cart.length; i++){
quantity = app.db('products').select('quantity').where({id: transaction.cart[i].id}).first()
quantity -= transaction.cart[i].quantity
app.db('products').update(quantity).where({id: transaction.cart[i].id})
const orderedProduct = {idOrder: parseInt(orderId), idProduct: parseInt(transaction.cart[i].id), quantity: parseInt(transaction.cart[i].quantity)}
app.db('orderedproducts').insert(orderedProduct).then(console.log('produto inserido')).catch(err => res.status(500).send(err))
}
return
}
Я ожидал, что он сначала сохранит мой заказ, вызовет функцию saveProducts, чтобы сохранить продукты в нем, и вернется, но он возвращает ошибку, как если бы это было запрещено ...