node.js - 无法使用 mongoose Model.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
.
如果您想在使用ObjectId
之前创建自己的,它通过参数接受字符串(字符串应该具有正确的格式)。save
mongoose.Types.ObjectId()
如果您的req.body
对象有一个空字段_id
,这应该可以工作:
const mongoose = require('mongoose');
req.body._id = mongoose.Types.ObjectId()
之后,您可以save
对象。
推荐阅读
- swift - 删除所有未来出现的 Realm 对象的正确方法是什么?
- sql - 如何正确地将美元符号添加到字符串中?
- javascript - Javascript递归数独求解器
- node.js - 在生产 MERN 堆栈中找不到模块 './[filename].jpeg'
- jspdf - `setFontType` 命令发生了什么?
- reactjs - 反应列表未呈现更新的状态数据
- flutter - 在gridview颤动中选择多个项目
- c++ - 使用布尔值跟踪球在 10 人圈内传球的程序
- airflow - 创建 Airflow 算子时在 params 中使用 params
- laravel - 如何将客户端库集成到 Laravel 中?(亚马逊 MWS)