Node.js启动webServer.js后服务无法监听端口,浏览器访问无限加载
问题原因
- 浏览器访问地址格式错误:端口需要通过冒号拼接在域名/IP后面,而不是作为路径使用,你填写的
localhost/80是错误格式,会被解析为访问localhost的80端口下的/80路径,而非指定访问80端口。 - 80端口监听权限/占用问题:80属于系统知名特权端口,Windows/macOS/Linux下监听该端口都需要管理员/root权限,且很可能被系统自带的IIS、Apache、Nginx等服务占用,导致监听失败,服务并未正常启动。
- 大量冗余打印阻塞事件循环:代码中打印完整的
req请求对象,该对象包含非常多的属性和嵌套结构,数据量极大,加上多行星号打印会阻塞Node.js的事件循环,导致服务无法正常响应请求。 - 无服务启动状态校验逻辑:你当前代码未给
listen方法添加成功/错误回调,无法第一时间感知端口监听失败的报错,容易误判服务已经启动。 - package.json配置拼写错误:
main字段值为webSever.js,和实际文件名webServer.js拼写不符(少了字母r),若后续使用npm相关启动命令会触发文件找不到报错。
解决方案
- 修正浏览器访问地址:直接访问
http://localhost即可(80是HTTP默认端口可以省略),如果后续换用其他端口,格式为http://localhost:端口号,比如用3000端口就访问http://localhost:3000。 - 删除冗余打印+更换端口+添加监听回调:建议删除不必要的
req全量打印和冗余星号打印,更换为1024以上的非特权端口,同时添加监听回调和错误监听,代码修改示例:
var http = require('http'); const server = http.createServer(function(req, res){ console.log('请求路径:', req.url); res.writeHead(200, {'Content-Type' : 'text/html'}); res.write('hello world'); res.end(); }); // 更换为3000非特权端口 server.listen(3000, () => { console.log('服务启动成功,监听端口3000'); }); // 监听启动错误,方便排查问题 server.on('error', (err) => { console.error('服务启动失败:', err.message); });
- 若坚持使用80端口:Windows下右键以管理员身份运行cmd后再执行启动命令,macOS/Linux下使用
sudo node webServer.js启动,同时可执行netstat -ano | findstr "80"(Windows)或lsof -i:80(macOS/Linux)检查80端口是否被其他程序占用,若被占用可关闭对应程序后再启动服务。 - 修正package.json配置:将
main字段值改为webServer.js,避免后续使用npm相关命令时报错。
内容的提问来源于stack exchange,提问作者Petar 5
相关产品推荐
相关产品推荐

