NODE / EXPRESS:[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头

时间:2020-10-03 01:26:24

标签: node.js express

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

路线

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

1 个答案:

答案 0 :(得分:0)

问题出在这里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语句时,该函数的执行将停止。如果指定,则将给定值返回给函数调用者。