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

Node.js运行http服务器出现write after end错误如何解决?

错误成因解释

你触发的ERR_STREAM_WRITE_AFTER_END错误核心原因是:HTTP响应流res在调用res.end()方法后就已经被关闭,不能再向已经关闭的流写入任何内容,你的代码逻辑恰好触发了这一规则。

你的代码逻辑存在流程漏洞:

  • 当访问/路径时,第一个if判断命中,执行res.end('Home Page')关闭响应流后,代码不会终止运行,会继续向下执行
  • 第二个if判断不命中跳过,最后一行res.end('Error')被触发,尝试向已经关闭的流写入内容,直接抛出错误
  • 访问/about路径同理,第二个if命中执行res.end后,还是会执行最后的res.end('Error'),同样会触发报错
修复方案

有两种常用的修复方式,二选一即可:

方案1:使用if-else分支阻断多分支执行

const http = require('http')
const server = http.createServer((req, res)=> {
  if(req.url === '/') {
      res.end('Home Page')
  } else if(req.url === '/about') {
     res.end('About us')
  } else {
      res.end('Error')
  }
})

server.listen(3000, ()=>{
    console.log('Server listening...');
})

该方案通过else分支确保同一时间只会命中一个响应逻辑,不会重复调用res.end。

方案2:在每个响应逻辑后添加return终止函数执行

const http = require('http')
const server = http.createServer((req, res)=> {
  if(req.url === '/') {
      res.end('Home Page')
      return
  }
  if(req.url === '/about') {
     res.end('About us')
     return
  }
  res.end('Error')
})

server.listen(3000, ()=>{
    console.log('Server listening...');
})

该方案通过return直接终止请求处理函数的后续执行,避免后续的res.end被调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:27:02