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

Node.js http模块实现API数据转发及Cannot set headers报错排查

问题分析与修复

你的代码存在几个关键问题,直接导致了错误和功能异常:

  1. 未向客户端返回响应:你在response.on('end')回调里return transfers完全无效——这个回调是异步执行的,express路由函数早就执行完毕,必须用res.json()/res.send()这类方法主动向客户端返回数据。
  2. 变量名拼写错误:console.log(transfer)里的transfer应为transfers,拼写错误会导致控制台报错。
  3. 请求未发送:调用http.request()后必须执行.end()来完成请求发送,否则第二个API根本收不到你的请求。
  4. 错误未反馈给客户端:请求出错时只在控制台打印错误,客户端会一直处于等待状态,应该返回错误响应。

修正后的代码

const express = require('express');
const router = express.Router();
const auth = require('../../middleware/auth')
const users = require('../../config/List');
const config = require('config');
const http = require('http');

router.post('/', auth, (req, res) => {
  console.log("auth route" + req.email);
  const queryEmail = "?email=" + req.email;
  const options = {
    hostname: 'website',
    path: '/api/auth' + queryEmail,
    method: 'POST',
    port: 2000,
    headers: {
      'authtoken': req.header('authtoken')
    }
  };

  // 发送请求
  const reqToApi = http.request(options, (response) => {
    let data = ''
    response.on('data', (chunk) => {
      data += chunk;
    });

    response.on('end', () => {
      try {
        const transfers = JSON.parse(data);
        console.log(transfers);
        // 向客户端返回处理后的数据
        res.json(transfers);
      } catch (parseErr) {
        // 处理JSON解析错误
        res.status(500).json({ error: '解析API响应失败' });
      }
    });
  }).on("error", (err) => {
    console.log("Error: ", err);
    // 向客户端返回错误信息
    res.status(500).json({ error: err.message });
  });

  // 必须调用end()完成请求发送
  reqToApi.end();
});

module.exports = router;

关键修改说明

  • 在response.on('end')回调中用res.json(transfers)向客户端返回数据,这是express发送响应的标准方式。
  • 修复了变量名拼写错误,确保控制台能正确打印返回数据。
  • 添加reqToApi.end()完成请求发送,保证第二个API能收到你的请求。
  • 增加JSON解析错误捕获和请求错误的客户端反馈,避免客户端无限等待。
  • 移除了不必要的async关键字(当前用回调式http请求,未用到await),后续如果改用axios等Promise式工具,可再添加async/await简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:01:33