【问题标题】:NODE/EXPRESS: [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the clientNODE/EXPRESS: [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头
【发布时间】:2020-10-03 01:26:24
【问题描述】:

我正在构建一个 node/express 后端并继续收到以下错误:(node:35061) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client。我不确定我在这里做错了什么......有人可以教育我这个问题可能是什么吗?蒂亚!

路线

userRoutes.post('', async (req, res) => {
  try {
    const { email, password } = req.body;

    const validate = await signUp.validate({ email, password });
    res.send(validate);

    const newUser = new User({ email, password });
    const sessionUser = sessionizeUser(newUser);
    await newUser.save();

    req.session.user = sessionUser;
    res.send(sessionUser);
    return;
  } catch (error) {
    res.status(400).send(parseError(error));
  }
});

【问题讨论】:

标签: node.js express


【解决方案1】:

问题出在 try 块中

try {
    const { email, password } = req.body;

    const validate = await signUp.validate({ email, password });
    res.send(validate); //over here

    const newUser = new User({ email, password });
    const sessionUser = sessionizeUser(newUser);
    await newUser.save();

    req.session.user = sessionUser;
    res.send(sessionUser); //over here 
    return;
  }

这意味着对于给定的客户端请求,服务器先前向客户端发送了响应(请求资源的成功响应或错误请求的错误响应),现在意外地尝试发送另一个回应

解决方案

解决此错误的简单方法是将 javascript return 语句添加到从 if 条件发送的响应中,以确保请求处理函数在响应发送到后退出(终止)使用该函数执行代码客户。

The description for the return statement on MDN states

在函数体中使用 return 语句时,函数的执行将停止。如果指定,则将给定值返回给函数调用者。

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2022-11-03
    • 2019-02-06
    • 2020-05-20
    • 2019-06-15
    • 2019-12-25
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多