Javascript 将头发送到ServerResponse.setHeader上的客户端[dev.start]后,无法设置头

Javascript 将头发送到ServerResponse.setHeader上的客户端[dev.start]后,无法设置头,javascript,node.js,rest,typescript,http-headers,Javascript,Node.js,Rest,Typescript,Http Headers,我有一个使用Nodejs的REST API,登录时在控制台中出现以下错误: 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)

我有一个使用Nodejs的REST API,登录时在控制台中出现以下错误:

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')
  })

但是服务器挂起了。任何帮助都将不胜感激。

如果您的代码尝试对同一请求响应两次,您将看到此错误

根据您的代码,我怀疑是登录处理程序

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
}

虽然我不是nodejs作为服务器平台的专家,但我可以告诉您,问题在于,一旦开始向客户机发送响应,您就会设置头。邮件头是第一个发送的邮件,因此您无法在响应后更改它们。验证(AuthenticationController.validation.login)中有什么代码?在nodejs中我不确定,但在PHP中,如果在发送头之前有一些echo语句,那么它会抛出错误,就像已经发送的头一样。@SatishSojitra它基本上是对密码和密码的一些验证email@OscarPaz是的,这也是我的想法,但我不会在比赛开始后设置任何标题response@peterSzoldan-共享更多代码,由于不清楚AuthenticationController.validation.login中的内容,AuthLocalWhat修复了该问题。谢谢:)