Почему пользователь регистрируется вместо того, чтобы показывать ошибку 11000 в mongoose?

#node.js #mongodb #mongoose #mongoose-schema

#node.js #mongodb #мангуст #мангуст-схема #mongoose #mongoose-схема

Вопрос:

Репо : https://github.com/heet-vakharia/codepen-cloned-server Я создаю серверную часть Codepen Clone, используя mongoose, я не знаю, почему, но register route не работает, он показывает, это ошибка при создании нового пользователя

 {
    "err": {
        "driver": true,
        "name": "MongoError",
        "index": 0,
        "code": 11000,
        "keyPattern": {
            "pens.id": 1
        },
        "keyValue": {
            "pens.id": null
        }
    }
}
  

Вот функция маршрута Reagister

 
const register = async (req, res, User, bcrypt) => {
  const { userid, password } = req.body;

  if (userid amp;amp; password) {
    var encryptedPassword = bcrypt.hashSync(password, 8);
    User.create(
      {
        userid: userid,
        password: encryptedPassword,
        pens: [],
      },
      (err, user) => {
           if (err) {
            res.status(405).status(err);
          } else {
             res.status(201).json(user);
         }
      }
    );
  } else {
    res.status(400).json({ msg: "Plz provide all information" });
  }
};
export default register;
  

Ответ №1:

Код 11000 означает, что вы пытаетесь сохранить дублирующуюся запись. Из репозитория userid он уникален, поэтому при попытке сохранить одну и ту же запись дважды вы получите код 11000.

Вместо этого вы должны использовать функцию обновления (даже при создании новых записей). При использовании {upsert:true} новые документы будут вставлены в коллекцию, в то время как существующие записи будут обновлены.

findOneAndUpdate() полезная функция.