You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+Restify中res.send()报错:Cannot set headers after they are sent

问题原因与修复方案

错误原因

你遇到的ERR_HTTP_HEADERS_SENT错误,根源在else分支的逻辑漏洞:
当data2存在时,代码执行res.send(200, data2)已经给客户端返回了响应,但函数并没有停止执行,会继续往下走到res.send(400, 'Error'),这时候试图再次发送响应,就会触发“不能在响应发送后再设置HTTP头”的错误。

修复方法

在发送200响应后,通过return终止函数执行,或者用Restify的next()方法结束当前中间件逻辑,避免后续代码重复发送响应。

修复后的代码示例(用return终止函数):

const implementation = async (req, res, next) => {
  try {
    if (req.rut) {
      const data = await someAPI();
      return res.send(200, data);
    } else {
      const data2 = await SomeAPI2();
      if (data2) {
        return res.send(200, data2);
      }
      return res.send(400, 'Error');
    }
  } catch (error) {
    return res.send(400, error);
  }
};

或者用Restify标准的next()方法结束中间件:

const implementation = async (req, res, next) => {
  try {
    if (req.rut) {
      const data = await someAPI();
      res.send(200, data);
      return next();
    } else {
      const data2 = await SomeAPI2();
      if (data2) {
        res.send(200, data2);
        return next();
      }
      res.send(400, 'Error');
      return next();
    }
  } catch (error) {
    res.send(400, error);
    return next();
  }
};

内容的提问来源于stack exchange,提问作者pmiranda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:48:30