1
votes

L'enregistrement des données dans MongoDb renvoie une ObjectParameterError

La version Mongoose est 5.5.13 et la version Express est 4.17.1.

La connexion à MongoDb via Mongoose ne pose aucun problème car elle ne renvoie au moins aucune erreur, mais le problème est lorsque j'essaye pour enregistrer des données avec une demande de publication.

Voici ma demande de publication de mon server.js:

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)

Et mon data.js qui définit le Schéma et modèle de Mongoose:

const mongoose = require("mongoose");

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

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

Comme vous pouvez le voir, il ne contient que 2 types de données: le nom et le numéro.

Je veux enregistrer ces données de contact simples dans MongoDb local mais j'obtiens celui-ci Erreur:

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);
  });
});

Que me manque-t-il? Merci d'avance pour votre aide.


0 commentaires

4 Réponses :


6
votes

Dans:

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

Vous avez oublié d'ajouter new qui est: new mongoose.Schema ({

Et

{ObjectParameterError: Le paramètre "obj" de Document () doit être un objet Principalement causé par des paramètres passés à mangouste qui n'est PAS un objet.

dans let contact = new ContactData (nom, numéro) , modifiez de (nom, numéro) à ({nom: nom, number: number}) ou simplement ({name, number}) car ils portent le même nom.


5 commentaires

Désolé de ne pas avoir mentionné que j'ai essayé cela aussi. Toujours la même erreur. Ou est-ce que je le teste d'une mauvaise manière? J'envoie une demande de message via Postman, mettant les données {"name": "John Doe", "number": "1413415"} dans l'onglet body-raw.


@Auclown {ObjectParameterError: Le paramètre "obj" de Document () doit être un objet Principalement causé par des paramètres passés à la mangouste qui n'est PAS un objet. essayez de rechercher vos méthodes de création ou les paramètres que vous leur avez envoyés et vérifiez s'il leur manque {} accolades.


@Auclown dans let contact = new ContactData (name, number) , modifier de (name, number) à ({name: name, number: number}) ou simplement ({name, number}) car ils ont le même nom. Faites le moi savoir.


@Auclown, je suis vraiment content pour vous) Et pourriez-vous s'il vous plaît accepter ma réponse, si vous avez aidé.


Terminé! Passez une bonne journée: D



3
votes

Vous passez des paramètres pour lesquels vous devez envoyer un objet à enregistrer dans mongodb

Essayez ceci,

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


0 commentaires

0
votes

Mec, je sais que je déterre cette question, mais je pense que tu as oublié d'envoyer ta demande POST au format JSON.


0 commentaires

1
votes

Votre erreur ObjectParameterError: Le paramètre "obj" de Document () doit être un objet, a obtenu John Doe

Cela dit tout ce que vous ne lui passez pas un objet.

Modifiez cette ligne dans votre code

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

Passez vos valeurs comme un objet comme celui-ci ci-dessous:

let contact = new ContactData(name, number);


0 commentaires