#node.js #mongodb #forms #express #mongoose
Вопрос:
Я создаю приложение для экспресс — счетов. Часть требований формы на передней панели состоит в том, чтобы разрешить пользователю добавлять несколько позиций счета-фактуры, которые включают название товара, количество товара и цену товара. У меня работает форма, когда пользователь добавляет в форму только один элемент. Есть ли способ разрешить форме отправлять несколько полей одного и того же типа поля мангуста?
Функция Контроллера
exports.createInvoice = async (req, res) =>{
try{
const newInvoice = await Invoice.create(req.body);
res.status(201).json({
status: 'success',
data: {
Invoice: newInvoice
}
});
} catch(err){
res.status(400).json({
status: 'fail',
message: err
});
}
}
Схема Мангуста
{
createdAt: {
type: Date,
default: Date.now()
},
paymentDue: {
type: Date
},
description: {
type: String,
required: false,
trim: true
},
paymentTerms: {
type: Number
},
clientName:{
type: String,
trim: true
},
clientEmail:{
type: String,
trim: true
},
status:{
type: String,
default: 'Pending',
enum: {
values: ['Pending', 'Paid', 'Draft'],
message: 'must be pending, paid or draft'
}
},
senderStreet: {
type: String,
trim: true
},
senderCity: {
type: String,
trim: true
},
senderPostcode: {
type: String,
trim: true
},
senderCountry: {
type: String,
trim: true
},
billToStreet: {
type: String,
trim: true
},
billToCity: {
type: String,
trim: true
},
billToPostcode: {
type: String,
trim: true
},
billToCountry: {
type: String,
trim: true
},
item:[
{
itemName: {
type: String,
trim: true
},
itemQuantity: {
type: Number
},
itemPrice: {
type: Number
}
}
],
totalPrice: {
type: Number,
trim: true
}
})```
Форма на странице Index.ejs
<div class="new-invoice-form">
<h2>Bill From</h2>
<form action="http://127.0.0.1:3000/new" method="POST">
<label for="Street address">Street address</label>
<input type="text" name="senderStreet">
<div class="address">
<div>
<label for="City">City</label>
<input type="text" name="senderCity">
</div>
<div>
<label for="Postcode">Postcode</label>
<input type="text" name="senderPostcode">
</div>
<div>
<label for="Country">Country</label>
<input type="text" name="senderCountry">
</div>
</div>
<h2>Bill To</h2>
<label for="Client's name">Client's Name</label>
<input type="text" name="clientName">
<label for="Client's email">Client's Email</label>
<input type="text" name="clientEmail">
<label for="Client's address">Client's address</label>
<input type="text" name="billToStreet">
<div class="address">
<div>
<label for="City">City</label>
<input type="text" name="billToCity">
</div>
<div>
<label for="Postcode">Postcode</label>
<input type="text" name="billToPostcode">
</div>
<div>
<label for="Country">Country</label>
<input type="text" name="billToCountry">
</div>
</div>
<div class="dates">
<div>
<label for="Invoice Date">Invoice Date</label>
<input type="date" name="createdAt">
</div>
<div>
<label for="Payment Due">Payment Due</label>
<input type="date" name="paymentDue">
</div>
</div>
<div>
<input type="text" name="item[][itemName]">
<input type="text" name="item[][itemQuantity]">
<input type="text" name="item[][itemPrice]">
<button class="button-5">Post</button>
</form>
</div>