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

如何使用Express将Node.js请求返回的响应体展示到浏览器?

错误原因

你遇到的ERR_HTTP_HEADERS_SENT错误核心原因是同一个请求触发了两次响应发送操作:

  • 当id参数合法时,你调用的request是异步方法,它的回调函数不会立刻执行,主线程代码会继续向下运行,先执行了末尾的res.send({status:400...}),已经给客户端返回了一次响应
  • 等request请求完成触发回调时,你又调用了一次res.send({status:200...}),此时响应头已经发给客户端,无法二次修改,就抛出了这个错误

修复方案

只需要把参数不合法的响应逻辑放到else分支里,保证合法参数场景下不会执行到非法参数的返回逻辑即可,修正后代码如下:

const request = require('request')
const express = require('express')
const app = express()

app.get('/getdata', (req, res) => {
    if (req.query.id !== undefined && req.query.id !== '') {
        request('http://localhost/myApi/index.php?id=' + req.query.id, (err, response, body) => {
            // 新增错误处理,避免上游接口请求异常时触发未知错误
            if (err) {
                return res.send({
                    status: 500,
                    msg: '接口请求失败'
                })
            }
            return res.send({
                status: 200,
                data: body
            })
        })
    } else {
        // 把非法参数的返回逻辑移到else分支内
        return res.send({
            status: 400,
            msg: 'Parameter invalid'
        })
    }
})

app.listen(2000)

额外建议

你用到的request库已经停止维护多年,新项目推荐使用Node.js内置的fetch方法或者axios这类更稳定的请求库来发起网络请求。

内容的提问来源于stack exchange,提问作者Galih Sukristyan Saputra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:06:03