Сохранение данных в MongoDb возвращает ObjectParameterError - PullRequest
1 голос
/ 10 июня 2019

Я практикуюсь по сохранению данных в MongoDb с помощью Node.js.

Я настроил сервер Express и создал модель Mongoose, но когда я пытаюсь сохранить некоторые данные через Postman, он продолжает возвращать ошибку ObjectParameterError.

Версия Mongoose - 5.5.13, а версия Express - 4.17.1.

У подключения к MongoDb через Mongoose нет проблем, поскольку по крайней мере он не возвращает никаких ошибок, но проблема заключается в том, что япытаюсь сохранить некоторые данные с помощью пост-запроса.

Вот мой пост-запрос от моего 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);
  });
});

И мой data.js, который определяет схему и модель Mongoose:

const mongoose = require("mongoose");

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

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

Как видите, он содержит только 2 типа данных: имя и номер.

Я хочу сохранить эти простые контактные данные в локальном 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)

Чего мне не хватает?Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вы передаете параметры, куда вам нужно отправить object, чтобы сохранить в монго дБ

Попробуйте это,

let contact = new ContactData({name, number});
2 голосов
/ 10 июня 2019

В:

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

Вы забыли добавить new, то есть: new mongoose.Schema({

И

{ObjectParameterError: Параметр "obj" для Document () должен быть объектом, в основном вызванным параметрами, передаваемыми в mongoose, которая НЕ является объектом.

в let contact = new ContactData(name, number), измените с (name,number) на ({name:name, number:number}) или просто ({name, number}), так как они имеют одинаковые имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...