将数据保存到MongoDb中会返回ObjectParameterError

时间:2019-06-10 04:03:27

标签: javascript node.js express mongoose

我正在练习使用Node.js将数据保存到MongoDb中。

我已经设置了Express服务器并创建了Mongoose模型,但是当我尝试通过Postman保存一些数据时,它会不断返回ObjectParameterError。

猫鼬版本为5.5.13,Express版本为4.17.1。

通过Mongoose连接到MongoDb没问题,因为它至少不会返回任何错误,但是问题是当我尝试通过发布请求保存一些数据时。

这是我来自server.js的发帖请求:

router.post("/create_contact", (req, res) => {
  const { name, number } = req.body;

  let contact = new ContactData(name, number);

  contact.save((error, contact) => {
    if (error) {
      return console.error(error);
    }

    return res.json(contact);
  });
});

还有定义了Mongoose模式和模型的data.js:

const mongoose = require("mongoose");

const ContactSchema = mongoose.Schema({
  name: String,
  number: Number
});

module.exports = mongoose.model("ContactData", ContactSchema);

如您所见,它仅包含两种类型的数据:名称和数字。

我想将此简单的联系人数据保存到本地MongoDb中,但出现此错误:

ObjectParameterError: Parameter "obj" to Document() must be an object, got John Doe
    at new ObjectParameterError (D:\LearnReact\db\backend\node_modules\mongoose\lib\error\objectParameter.js:25:11)
    at model.Document (D:\LearnReact\db\backend\node_modules\mongoose\lib\document.js:73:11)
    at model.Model (D:\LearnReact\db\backend\node_modules\mongoose\lib\model.js:96:12)
    at new model (D:\LearnReact\db\backend\node_modules\mongoose\lib\model.js:4580:15)
    at router.post (D:\LearnReact\db\backend\server.js:28:17)
    at Layer.handle [as handle_request] (D:\LearnReact\db\backend\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\LearnReact\db\backend\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (D:\LearnReact\db\backend\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (D:\LearnReact\db\backend\node_modules\express\lib\router\layer.js:95:5)
    at D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:335:12)
    at next (D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:174:3)
    at router (D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:47:12)
    at Layer.handle [as handle_request] (D:\LearnReact\db\backend\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (D:\LearnReact\db\backend\node_modules\express\lib\router\index.js:317:13)

我想念什么?预先感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

在:

const ContactSchema = mongoose.Schema({
  name: String,
  number: Number
});

您忘记添加new的{​​{1}}

还有

  

{ObjectParameterError:Document()的参数“ obj”必须是一个对象,主要是由传递给Mongoose的参数(不是对象)引起的。

new mongoose.Schema({中将

let contact = new ContactData(name, number)修改为(name,number)或仅修改({name:name, number:number}),因为它们具有相同的名称。

答案 1 :(得分:2)

您正在传递参数,您需要在其中发送object并将其保存在mongo db中

尝试一下,

let contact = new ContactData({name, number});

答案 2 :(得分:2)

你的错误ObjectParameterError: Parameter "obj" to Document() must be an object, got John Doe

它说明你没有向它传递一个对象。

在代码中编辑这一行

let contact = new ContactData(name, number);

将您的值作为如下对象传递:

let contact = new ContactData({name, number});

答案 3 :(得分:1)

将姓名和号码作为对象 像这样let contact = new ContactData({name, number});

答案 4 :(得分:0)

Dude,我知道我要解决这个问题,但是我认为您忘记了以JSON格式发送POST请求。