Пн goose пост Query Middleware крючок триггера дважды - PullRequest
0 голосов
/ 05 февраля 2020

Я использую mon goose Model.findOneAndupdate () , чтобы найти и обновить мой документ, и в моей модели есть хук post, для которого я пытаюсь обновить другой документ ,

Проблема, с которой я сталкиваюсь, заключается в том, что post крючок запускается дважды.

Моя модель:

const mongoose = require('mongoose')

const componentSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  component: {
    type: String,
    required: true
  },
  message: {
    type: String
  },
  bodyJson: {
    type: mongoose.Schema.Types.Mixed
  },
  question: {
    type: String
  }
})


componentSchema.post('findOneAndUpdate', function (result) {
  console.log('came here')
})

module.exports = mongoose.model('Component', componentSchema)

В моем журнале сервера я вижу, что came here вошел дважды.

обновление:

try {
  await Component.findOneAndUpdate(query, req.body, { new: true }, function (error, doc) {
    if (doc) {
      return res.status(200).json({ data: doc })
    } else if (error) {
      return res.status(400).json({ errors: error.message })
    } else res.status(404).json({ errors: 'Not found' })
  })
} catch (error) {
  logger.error('error while updating order: ' + error)
  return res.status(400).json({ errors: error.message })
}

луна goose Используемая версия - 5.8.11

1 Ответ

2 голосов
/ 05 февраля 2020

Вы используете одновременно и ожидание, и обратный вызов. Это вызывает запуск промежуточного программного обеспечения 2 раза. Только один из них должен быть использован.

Используйте либо обратный вызов:

Component.findOneAndUpdate(query, req.body, { new: true }, function(
  error,
  doc
) {
  if (err) {
    return res.status(400).json({ errors: error.message }); //500 status code may be better
  } else {
    if (doc) {
      return res.status(200).json({ data: doc });
    } else {
      res.status(404).json({ errors: "Not found" });
    }
  }
});

, либо ожидайте:

try {
  const doc = await Component.findOneAndUpdate(query, req.body, { new: true });

  if (doc) {
    return res.status(200).json({ data: doc });
  } else {
    res.status(404).json({ errors: "Not found" });
  }
} catch (error) {
  logger.error("error while updating order: " + error);
  return res.status(400).json({ errors: error.message });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...