Анализ массива размещенных объектов, Экспресс

#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">