#node.js #express #post
Вопрос:
Мне нужно проанализировать данные с помощью формы Express from:
invoiceRouter.post('/', async (req,res) => {
console.log(req.body);
let invoice = new Invoice();
invoice = req.body;
invoice.status = 0;
//save
res.redirect('/invoices');
});
Когда я регистрируюсь, массив объектов считывается как список значений:
{
createdDate: '2021-10-15',
invoiceRows: [ 'Title3', '2', 'Title2', '3' ]
}
Но он не может прочитать invoiceRows как массив из 2, поэтому я изо всех сил пытаюсь разобрать его в массив для сохранения.
Когда я устанавливаю extended: false
, я вижу следующий результат из req.body:
[Object: null prototype] {
createdDate: '2021-10-15',
'invoiceRows[0].productTitle': 'Title2',
'invoiceRows[0].unitPrice': '2',
'invoiceRows[1].productTitle': 'Title3',
'invoiceRows[1].unitPrice': '2'
}
Схема, которую я использую:
const invoiceSchema = new mongoose.Schema({
createdDate: {
type: Date,
required: true
},
status: {
type: Number,
required: true
},
invoiceRows: [{
productTitle: String,
unitPrice: Number
}]
});
Вопрос: что я делаю не так, чтобы получить массив объектов из req.body внутри родительского объекта?
Ответ №1:
В вашем теле вы должны получать, как показано ниже (в соответствии с вашей схемой модели). Сделайте свой интерфейс для отправки данных, как показано ниже.
{
createdDate: '2021-10-15',
invoiceRows: [ { productTitle :'Title1', unitPrice : 2}, { productTitle :'Title2', unitPrice : 3} ]
}
Комментарии:
1. Спасибо, это было на фронтенде. Мне нужно было использовать квадратные скобки в поле имени вокруг свойства «ProductTitle», как это:
<input required type="text" value="<%= invoice.invoiceRows[key].productTitle %>" name="invoiceRows[<%= key %>].[productTitle]" class="form-control">