在Mongo中的一个post请求中提交多个数据实例



我正在处理这个模块,它是一个post表单,用于获取费用数据(名称、日期、金额、图像和描述(。我已经想好了如何将一行数据的发布数据放入mongo中,但我希望用户能够提交多行数据(即多笔费用(。不幸的是,当我试图提交带有多个该数据实例的表单时,我遇到了一个错误!

错误:费用验证失败:日期:路径"date"处的值"['2018-07-01','2018-07-09']"的"转换到日期"失败

关于如何正确提交上述数据的多行有什么想法吗?

信息:

  1. 我正在使用express作为服务器
  2. 数据库MongoDB

ExpenseForm.js-->(使用pug模板引擎(

button#submitExpense(type='submit' form='addExpenseForm').btn Submit 
// ADD EXPENSE FORM
form#addExpenseForm(method='POST' action='/expenses').row
div.col-md-12.add-expense-row-wrapper
div#expenseRow.row.form-group
input.form-control.col-md-2(type='text' name='name' placeholder='Enter Name*')
input.form-control.col-md-2(type='date' name='date')
input.form-control.col-md-2(type='number' name='amount' placeholder='Enter Amount*')
input.form-control.col-md-2(type='text' name='description' placeholder='Description*')
input.col-md-3(type='file' name='file' id='files' placeholder='Upload receipt' multiple)
button#deleteExpenseRow.col-md-1.btn.delete-expense-row(type='button' )
i.fas.fa-trash-alt
div.row.add-expense-button-wrapper 
button#addExpenseRow.btn(type='button')
i.far.fa-plus-square

还忘了我的模式

expense.js-->

const ExpenseSchema = new mongoose.Schema({
employee: {
type: String,
required: true,
trim: true
},
date: {
type: Date,
required: true,
default: Date.now
},
amount: {
type: Number,
required: true,
validate: {
validator: Number.isInteger,
message: '{VALUE} is not an integer value'
}
},
description: {
type: String,
required: true
},
file: {
type: Buffer,
required: true
}
});
var Expense = mongoose.model('Expense', ExpenseSchema);
module.exports = Expense;

以及邮寄路线index.js-->

// POST /expenses
router.post('/expenses', function(req, res, next) {
// Expense.getExpenses({
//   name: req.body.name,
//   date: req.body.date,
//   amount: req.body.amount,
//   description: req.body.description,
//   file: req.body.file
// }, 10, function(err, post) {
//   if (err) {
//     return next(err);
//   }
//   console.log(req.body);
//   res.json(post);
// });

// create object with form input
var expenseData = {
employee: req.body.name,
date: req.body.date,
amount: req.body.amount,
description: req.body.description,
file: req.body.file
};
// store data from from into mongo
Expense.create(expenseData, function(error) {
if (error) {
return next (error);
} else {
console.log(expenseData);
return res.redirect('/dashboard');
}
});
});

因此,数据将以数组的形式出现。name将包含所有名称的数组等等。您可以遍历所有名称并保存在数据库中,然后在保存最后一项后返回。

var employee = req.body.name;
var date = req.body.date;
var amount = req.body.amount;
var description = req.body.description;
var file = req.body.file;
var expenseData = {};
employee.forEach(function(element, index, array) {
expenseData = {
employee: employee[index],
date: date[index],
amount: amount[index],
description: description[index],
file: file[index]
};
Expense.create(expenseData, function(error) {
if (error) {
return next(error);
} else {
if (index === employee.length - 1) {
return res.redirect('/dashboard');
}
}
});
});

步骤如下:

  1. 您确实需要在一个数组中收集数据,它看起来像这样:expenseArr=[{row1Data},{row2Data}…]
  2. 在您的邮寄路线中,您需要导入您的支出模型,如下所示:const expenses=require('thePathAndNameOfYourSchemaExportFile'(
  3. 在你的邮寄路线中调用expense.insertMy(expenseArr(方法,猫鼬会做必要的事情。在最后一步中,不要忘记您需要等待insertMany完成(建议您有一个回调,以防出现问题(

最新更新