Использование Mongoose pre save hook приводит к: Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь подключиться к функции сохранения в Mongoose, чтобы вернуть клиенту REST API ошибку, если в схеме не выполнено определенное условие. Я не могу использовать валидатор для этого, так как ограничение рассчитывается для нескольких полей схемы.

Я пытаюсь добавить хук в следующем стиле:

mySchema.pre('save', function (next) {
  if(condition_is_not_met) {
    const err = new Error('Condition was not met');
    next(err);
  }
  next();
});

Это выбрасываетошибка, когда я пытаюсь позвонить конечной точке, пытаясь вставить объект, который нарушает условие, проверенное в ловушке:

Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки вclient

Я предполагаю, что это происходит, потому что продолжается выполнение маршрута написание заголовка для отправки его клиенту.

router.post('/mySchema', returnType, (req, res) => {
  const s = new mySchema(req.body);
  s.save((err) => {
    if (err) {
      const msg = { message: 'Could not add', error: err }; // This is returned to the caller
      res.status(500);
      res.send(msg);
    }
    res.status(200);
    res.send(s);
  });
});

Как я могу исправить эту проблему? Я искал довольно много, но темы, которые я нашел до сих пор, не помогают мне решить мою проблему. Они только помогли мне определить причину, не предложив работающего решения.

1 Ответ

1 голос
/ 30 октября 2019

вы пробовали создать еще одну ветку для ответа об успехе? Поскольку даже если объект недействителен, ответ об успешном выполнении все равно будет выполнен. Попробуйте, как показано ниже

router.post("/mySchema", returnType, (req, res) => {
  const s = new mySchema(req.body);
  s.save(err => {
    if (err) {
      const msg = { message: "Could not add", error: err };
      res.status(500);
      res.send(msg);
    } else {
      res.status(200);
      res.send(s);
    }
  });
});

Простите за форматирование кода, я AFK

...