首页 > 解决方案 > 无法使用 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: ''
}

错误 在此处输入图像描述

标签: node.jsmongoosemean

解决方案


如果您尝试保存_id生成错误的对象(例如空字符串),则会引发错误。

如果要自动生成 te _id,则不必插入对象。

因此,例如,像这样的对象:

{
  _id: "",
  name: "Name"
}

尝试保存时会失败。

但同样的对象是这样的:

{
  name: "Name"
}

将插入一个自动生成的_id.

如果您想在使用ObjectId之前创建自己的,它通过参数接受字符串(字符串应该具有正确的格式)。savemongoose.Types.ObjectId()

如果您的req.body对象有一个空字段_id,这应该可以工作:

const mongoose = require('mongoose');

req.body._id = mongoose.Types.ObjectId()

之后,您可以save对象。


推荐阅读