Невозможно установить заголовки после того, как они отправлены клиенту [dev.start] на ServerResponse.setHeader - PullRequest
0 голосов
/ 04 мая 2018

У меня есть REST API с использованием Nodejs, и при входе в систему я получаю эту ошибку в консоли:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:481:11)
at ServerResponse.header (/node_modules/express/lib/response.js:767:10)

И в моем контроллере у меня есть функция входа в систему:

export async function login(req, res, next) {
  res.status(HTTPStatus.OK).json(req.user.toAuthJSON());
  return next();
}

А вот и маршрут входа в систему:

routes.post(
  '/login',
  validate(AuthenticationController.validation.login),
  authLocal,
  AuthenticationController.login,
);

Я попытался добавить заголовки в основной индексный файл:

  app.use ((res) => {
    res.header('Content-Type', 'application/x-www-form-urlencoded')
  })

но сервер просто зависает. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 мая 2018

Вы увидите эту ошибку, если ваш код пытается дважды ответить на один и тот же запрос.

Из вашего кода, я подозреваю, обработчик входа в систему.

export async function login(req, res, next) {
  res.status(HTTPStatus.OK).json(req.user.toAuthJSON()); // Sends the response first
  return next(); // Invokes the next handler, which will also respond
}

Чтобы это исправить, вернитесь сразу после отправки первого запроса.

export async function login(req, res, next) {
  return res.status(HTTPStatus.OK).json(req.user.toAuthJSON()); // Sends the response first
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...