Node.js运行无报错访问localhost:3000提示ERR_CONNECTION_REFUSED如何解决
问题排查及解决步骤
第一步:确认服务实际启动状态
你当前的代码没有添加监听成功的回调逻辑,无法直观判断服务是否真的完成端口监听,首先修改代码:
const http = require('http'); var server = http.createServer( (request, response)=>{ response.end('hello'); } ); // 显式绑定IPv4地址,添加启动日志确认监听成功 server.listen(3000, '127.0.0.1', () => { console.log('服务启动成功,可访问 http://127.0.0.1:3000 测试'); });
修改后重新执行node app.js,如果终端没有输出上面的启动日志,说明服务根本没有完成监听,优先排查以下情况:
- 检查当前终端的工作目录是否和
app.js存放目录一致,避免执行了其他目录的空文件 - 右键VS Code选择「以管理员身份运行」后重新启动服务,排除普通用户权限不足导致的监听被系统静默拦截问题
第二步:校验端口占用情况
如果修改代码后依旧没有启动日志,执行如下命令查看3000端口占用情况:netstat -ano | findstr :3000
- 如果返回结果中没有
LISTENING状态的记录,说明端口没有被任何程序监听,尝试更换其他端口(比如3001、8080)重新启动服务,确认是否是端口被系统预留导致无法绑定 - 如果返回结果有
LISTENING记录,查看对应PID,打开任务管理器「详情」页核对PID对应的进程是否为node.exe:如果是其他程序占用端口,关闭对应程序或更换node服务端口即可;如果是node.exe占用但访问不通,继续下一步排查
第三步:排除访问端拦截问题
- 检查系统代理、VPN是否开启,开启状态下尝试关闭代理/VPN,或将
127.0.0.1、localhost加入代理忽略列表 - 不要直接用浏览器测试,新开一个cmd窗口执行
curl http://127.0.0.1:3000,如果返回hello说明服务正常,是浏览器侧的问题:可以清理浏览器缓存、关闭广告拦截类插件、用无痕模式访问测试 - 临时关闭Windows Defender防火墙,测试是否可以访问,如果关闭后可正常访问,重新配置入站规则,确保规则是针对TCP协议的3000端口、允许所有配置文件的连接
内容的提问来源于stack exchange,提问作者Rina
相关产品推荐
相关产品推荐

