MongoError: документ не прошел проверку - не знаю, почему - PullRequest
0 голосов
/ 06 мая 2020

в настоящее время работает над базовым c CRUD-приложением, использующим MongoDB в качестве моей базы данных, и продолжает получать ошибку MongoError: документ не прошел проверку и не могу понять, как это исправить.

похоже, что мои данные успешно отправляются из внешнего интерфейса на сервер express, поскольку я могу видеть пользовательские данные в теле запроса через некоторые операторы console.log в моем коде на стороне сервера.

вот что я сделал до сих пор, может быть кто-то заметит то, что я упустил:

интерфейс:

// property values assigned by setter in useState hooks 
const userDetails = {
    firstName: firstName,   // john
    lastName: lastName,     // doe
    email: email,           // johndoe111@gmail.com
    password: password,     // password1
  };

  const createUserAccount = () => {
    fetch("/api/users", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(userDetails),
    })
      .then(console.log("POST request sucessful"))
      .catch((e) => console.log("error:", e.message));
  };

полезная нагрузка запроса:

{"firstName":"john","lastName":"doe","email":"johndoe111@gmail.com","password":"password1"}

внутренняя часть:

const jsonBodyParser = bodyParser.json();

// some code to create an instance of mongo client 
// some code to connnect to my cluster


const createDatabase = async (client) => {
  const db = client.db(databaseName);

  try {
    await db.createCollection("users", {
      autoIndexId: true,
      validator: {
        $jsonSchema: {
          bsonType: "object",
          required: ["firstName", "lastName", "email", "password"],
          properties: {
            firstName: {
              bsonType: "string",
              description: "must be a string and is required",
            },
            lastName: {
              bsonType: "string",
              description: "must be a string and is required",
            },
            email: {
              bsonType: "string",
              description: "must be a string and is required",
            },
            password: {
              bsonType: "string",
              description: "must be a string and is required",
            },
          },
        },
      },
    });
    console.log("[MongoDB]: users collection created.");
    await db.createCollection("products", {});
    console.log("[MongoDB]: products collection created.");
  } catch (err) {
    console.log(err);
  }

  console.log("[MongoDB]: database created");
};


app.post("/api/users", jsonBodyParser, (req, res) => {
  console.log(req.body);
  const userDetails = {
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    email: req.body.email,
    password: req.body.password,
  };
  console.log("user details: ", userDetails);

  try {
    client.db(databaseName).collection("users").insertOne({ userDetails });
  } catch (error) {
    console.log("[MongoDB]: ", error);
  }
});

тело запроса (после анализа):

{
  firstName: 'john',
   lastName: 'doe',
   email: 'johndoe111@gmail.com',
  password: 'password1'
 }

большое спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

Проблема в этой строке:

client.db(databaseName).collection("users").insertOne({ userDetails })

Поскольку userDetails уже является объектом, вам не нужны лишние усы, просто используйте объект напрямую:

client.db(databaseName).collection("users").insertOne( userDetails )
...