Ошибка [ERR_HTTP_HEADERS_SENT] Невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 11 февраля 2020
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (C:\root\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\root\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\root\node_modules\express\lib\response.js:267:15)
    at ServerResponse.send (C:\root\node_modules\express\lib\response.js:158:21)
    at grade.save (C:\root\route\api\listsData.js:223:32)
    at C:\root\node_modules\mongoose\lib\model.js:4604:16
    at C:\root\node_modules\mongoose\lib\utils.js:268:11
    at $__save.error (C:\root\node_modules\mongoose\lib\model.js:472:16)
    at C:\root\node_modules\kareem\index.js:246:48
    at next (C:\root\node_modules\kareem\index.js:167:27)
    at next (C:\root\node_modules\kareem\index.js:169:9)
    at Kareem.execPost (C:\root\node_modules\kareem\index.js:217:3)
    at _handleWrapError (C:\root\node_modules\kareem\index.js:245:21)
    at C:\root\node_modules\kareem\index.js:272:14
    at _next (C:\root\node_modules\kareem\index.js:94:14)
Emitted 'error' event at:

Пожалуйста, помогите, я столкнулся с этой проблемой почти 3 дня, ниже мой бэкэнд nodejs код: GradeModel

const mongoose = require('mongoose');

const GradeSchema = new mongoose.Schema({
  name: {
    type: String,
    maxlength: 100,
    required: true,
    unique: true
  }
})

module.exports = Grade = mongoose.model('Grade', GradeSchema);

AddGradeRoute

  '/add/grade',
  [
    check('name', 'grade name is require')
      .not()
      .isEmpty()
  ],
  auth,
  admin,
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) res.status(400).send({ errors: errors.array() });

    const grade = new Grade(req.body);

    grade.save((err, doc) => {
      if (err) res.status(400).send({ success: false, err });
      return res.status(200).send({
        success: true,
        grade: doc,
        msg: 'Grade add successfully'
      });
    });
  }
);

The Проблема в том, что я пытался добавить оценку с помощью пост-запроса, он работает нормально, но если я оставил пустое поле и снова отправил запрос, приложение зависало и возвращалось с ошибкой, указанной выше: «Невозможно установить заголовки после их отправки клиенту» , Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2020

вам необходимо вернуть ваш ответ об ошибке, если произошла ошибка, иначе ваша функция продолжит работу и будет выполнять приведенный ниже код даже после ошибки.

  '/add/grade',
  [
   check('name', 'grade name is require')
  .not()
  .isEmpty()
],
auth,
admin,
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) return res.status(400).send({ errors: errors.array() });

const grade = new Grade(req.body);

grade.save((err, doc) => {
  if (err) return res.status(400).send({ success: false, err });
  return res.status(200).send({
    success: true,
    grade: doc,
    msg: 'Grade add successfully'
  });
});
}
);

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

Как вы должны знать, что в запросе HTTP ответ может быть отправлен только один раз и когда функция снова отправляет ответ после ошибки показывает, что вы не можете отправлять заголовки ответа после их отправки клиенту.

Надеюсь, это поможет. УДАЧИ :))

...