无法使用 mongoose Model.save() 保存 - 给出内部服务器错误
unable to save with mongoose Model.save() - gives Internal Server Error
这是 MEAN 应用程序的一部分。代码执行到达节点控制器方法并正确创建模型对象(使用控制台日志验证)。但是,mongoose model.save() 方法会产生错误,如下所示。可能是什么原因?
节点控制器中的方法
exports.addEmployee = (req, res, next) => {
const employee = new Employee(req.body);
console.log('backend emp ctlr - employee: ' + employee)
employee.save()
.then( addedEmployee => {
res.status(201).
json({
message: 'Employee added.',
employeeId: addedEmployee._id
});
})
.catch(err => {
res.status(500)
.json({
message: "Server Error in saving Employee's data!"
});
});
}
上面代码中的控制台日志语句给出了正确的模型对象,如下所示
backend emp ctlr - employee: {
_id: 5f9e9ee678b4704318ebc927,
title: 'Mr.',
fName: 'Arjun',
lName: 'Singh',
desig: '',
coEmail: 'hemantparmarh@gmail.com',
personalEmail: '',
mobile1: '1111122222',
mobile2: '',
gender: '',
dob: null,
qualifications: '',
band: '',
ctc: null,
dateOfJoining: null,
experienceStartDate: null,
leftCompany: false,
dateOfLeaving: null,
pan: '',
addr1: '',
addr2: '',
city: '',
state: '',
pincode: '',
contactPersonName: '',
contactPersonMobile: '',
userName: ''
}
错误
如果您尝试保存生成了 _id
错误的对象(例如空字符串),则会抛出错误。
如果你想自动生成 te _id
你必须不插入对象。
因此,例如,这样的对象:
{
_id: "",
name: "Name"
}
保存失败
但是同一个对象是这样的:
{
name: "Name"
}
将插入自动生成的 _id
。
如果您想在 save
之前创建您自己的 ObjectId
,您可以使用 mongoose.Types.ObjectId()
,它通过参数接受字符串(字符串应该具有正确的格式)。
如果您的 req.body
对象有一个空字段 _id
这应该有效:
const mongoose = require('mongoose');
req.body._id = mongoose.Types.ObjectId()
之后,您可以save
对象。
这是 MEAN 应用程序的一部分。代码执行到达节点控制器方法并正确创建模型对象(使用控制台日志验证)。但是,mongoose model.save() 方法会产生错误,如下所示。可能是什么原因?
节点控制器中的方法
exports.addEmployee = (req, res, next) => {
const employee = new Employee(req.body);
console.log('backend emp ctlr - employee: ' + employee)
employee.save()
.then( addedEmployee => {
res.status(201).
json({
message: 'Employee added.',
employeeId: addedEmployee._id
});
})
.catch(err => {
res.status(500)
.json({
message: "Server Error in saving Employee's data!"
});
});
}
上面代码中的控制台日志语句给出了正确的模型对象,如下所示
backend emp ctlr - employee: {
_id: 5f9e9ee678b4704318ebc927,
title: 'Mr.',
fName: 'Arjun',
lName: 'Singh',
desig: '',
coEmail: 'hemantparmarh@gmail.com',
personalEmail: '',
mobile1: '1111122222',
mobile2: '',
gender: '',
dob: null,
qualifications: '',
band: '',
ctc: null,
dateOfJoining: null,
experienceStartDate: null,
leftCompany: false,
dateOfLeaving: null,
pan: '',
addr1: '',
addr2: '',
city: '',
state: '',
pincode: '',
contactPersonName: '',
contactPersonMobile: '',
userName: ''
}
错误
如果您尝试保存生成了 _id
错误的对象(例如空字符串),则会抛出错误。
如果你想自动生成 te _id
你必须不插入对象。
因此,例如,这样的对象:
{
_id: "",
name: "Name"
}
保存失败
但是同一个对象是这样的:
{
name: "Name"
}
将插入自动生成的 _id
。
如果您想在 save
之前创建您自己的 ObjectId
,您可以使用 mongoose.Types.ObjectId()
,它通过参数接受字符串(字符串应该具有正确的格式)。
如果您的 req.body
对象有一个空字段 _id
这应该有效:
const mongoose = require('mongoose');
req.body._id = mongoose.Types.ObjectId()
之后,您可以save
对象。