Сбой приложения в MongoError: E11000 сбор дубликатов ошибок ключа - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение для среднего стека, в котором я предоставляю БД с некоторыми входными данными, включая электронную почту. Теперь в этом случае каждое электронное письмо должно быть уникальной записью, и при вводе повторяющегося электронного письма происходит сбой приложения, что ожидается.

Сбой узла узла с сообщением

MongoError: E11000 duplicate key error collection

и затем выдает еще одну ошибку

[nodemon] app crashed - waiting for file changes before starting...

, после которой он не может перезапуститься автоматически. Вручную, когда я перезапускаю nodemon, все работает нормально, но нужен какой-то процесс, который nodemon должен возобновить после показа вышеупомянутого сообщения.

Есть ли способ добиться того же?

Вот некоторый код длято же самое в моей службе, работающей

updateClient(req, res){
    _db.Client.update( {code: req.body.code }, {  $set:{
       _db.Client.update( {code: req.body.code }, {  $set:{
  name:req.body.name,
      desc:req.body.desc,
      ...
      contract:{signedBy:req.body.contract.signedBy, start:req.body.contract.start, end:req.body.contract.end},
      ...
       }}).exec((err, docs) => {
           if (err || docs.ok !== 1) {
             log.error(err);
             res.send({ success: false, message: 'Meesage on fail' });
           }
           if (docs.ok === 1) {
             res.send({ success: true, message: 'message on fail' });
           }
       });

Ошибка, которую я получил

E11000 duplicate key error collection: hrms.clients index: contact.email_1 dup key: { : "asidansd@jsanod.com" }
MongoError: E11000 duplicate key error collection: hrms.clients index: contact.email_1 dup key: { : "asidansd@jsanod.com" }
    at Function.MongoError.create (/Users/***/hrms/node_modules/mongoose/node_modules/mongodb-core/lib/error.js:31:11)
    at toError (/Users/***/node_modules/mongoose/node_modules/mongodb/lib/utils.js:139:22)
    at /Users/***/node_modules/mongoose/node_modules/mongodb/lib/collection.js:1059:67
    at /Users/***/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:469:18
    at process._tickCallback (internal/process/next_tick.js:61:11)

Также моя схема определяется следующим образом

static get Schema(){
    return mongoose => ({
        name: { type: String},
       ...
        contract:{signedBy:{type:String}, start:{type:Date}, end:{type:Date}},

...})}

Ответы [ 2 ]

1 голос
/ 04 октября 2019
  username: {
    unique: [true, "Username alraedy available"],
    type: String,
    required: [true, "Username is required"],
    }
  },
0 голосов
/ 04 октября 2019

Пожалуйста, укажите вашу схему в своем вопросе. Обычно, если адрес вашей электронной почты_1 уникален.

  username: {
    unique: [true, "Username alraedy available"],
    type: String,
    required: [true, "Username is required"],
    }
  },
...